From ae9912a480aed3fdb74cf030aca421171227de15 Mon Sep 17 00:00:00 2001 From: kang Date: Sat, 24 Sep 2016 02:01:51 +0800 Subject: [PATCH 01/32] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E6=97=A0=E6=B3=95=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E9=97=AE=E9=A2=98=202.=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=88=97=E8=A1=A8=E6=97=A0=E6=B3=95=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bcloud/SigninDialog.py | 20 +++++++++----------- bcloud/const.py | 2 +- bcloud/pcs.py | 2 +- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/bcloud/SigninDialog.py b/bcloud/SigninDialog.py index f38c03d..b789fc8 100644 --- a/bcloud/SigninDialog.py +++ b/bcloud/SigninDialog.py @@ -108,7 +108,8 @@ def _refresh_vcode(info, error=None): self.vcodetype, callback=_refresh_vcode) def check_entry(self, *args): - if len(self.vcode_entry.get_text()) == 4: + '''中文验证码长度为2,英文验证码长度为4''' + if len(self.vcode_entry.get_text()) == 4 or len(self.vcode_entry.get_text()) == 2: self.response(Gtk.ResponseType.OK) def on_vcode_refresh_clicked(self, button): @@ -319,15 +320,11 @@ def on_post_login(info, error=None): verifycode = dialog.get_vcode() codeString = dialog.codeString dialog.destroy() - if not verifycode or len(verifycode) != 4: - self.signin_failed(_('Please input verification code!')) - return - else: - self.signin_button.set_label(_('Get bdstoken...')) - gutil.async_call(auth.post_login, cookie, - tokens, username, - password_enc, rsakey, verifycode, - codeString, callback=on_post_login) + self.signin_button.set_label(_('Get bdstoken...')) + gutil.async_call(auth.post_login, cookie, + tokens, username, + password_enc, rsakey, verifycode, + codeString, callback=on_post_login) # 密码错误 elif errno == 4: logger.error('SigninDialog.on_post_login: %s, %s' % @@ -383,7 +380,8 @@ def on_check_login(info, error=None): verifycode = dialog.get_vcode() codeString = dialog.codeString dialog.destroy() - if not verifycode or len(verifycode) != 4: + '''中文验证码长度为2,英文验证码长度为4''' + if not verifycode or len(verifycode) != 4 or len(verifycode) != 2: self.signin_failed(_('Please input verification code!')) return else: diff --git a/bcloud/const.py b/bcloud/const.py index 85c2761..092145e 100644 --- a/bcloud/const.py +++ b/bcloud/const.py @@ -40,7 +40,7 @@ PC_CLIENT_TYPE = '8' PC_APP_ID = '1981342' PC_DEVUID = 'BDIMXV2%2DO%5FFD60326573E54779892088D1378B27C6%2DC%5F0%2DD%5F42563835636437366130302d6662616539362064%2DM%5F08002788772E%2DV%5F0C94CA83' -PC_VERSION = '4.5.0.7' +PC_VERSION = '5.2.7.2' ## HTTP 请求时的一些常量 CONTENT_FORM = 'application/x-www-form-urlencoded' diff --git a/bcloud/pcs.py b/bcloud/pcs.py index bbe41f3..efd0f30 100644 --- a/bcloud/pcs.py +++ b/bcloud/pcs.py @@ -530,7 +530,7 @@ def list_dir(cookie, tokens, path, page=1, num=100): timestamp = util.timestamp() url = ''.join([ const.PAN_API_URL, - 'list?channel=chunlei&clienttype=0&web=1', + 'list?channel=chunlei&clienttype=8&web=1', '&num=', str(num), '&t=', timestamp, '&page=', str(page), From 65baa66478a65f2be88be24a2b9c9373c038a594 Mon Sep 17 00:00:00 2001 From: kang Date: Sat, 24 Sep 2016 02:03:51 +0800 Subject: [PATCH 02/32] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E6=97=A0=E6=B3=95=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E9=97=AE=E9=A2=98=202.=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=88=97=E8=A1=A8=E6=97=A0=E6=B3=95=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bcloud/pcs.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bcloud/pcs.py b/bcloud/pcs.py index efd0f30..e480de6 100644 --- a/bcloud/pcs.py +++ b/bcloud/pcs.py @@ -530,7 +530,9 @@ def list_dir(cookie, tokens, path, page=1, num=100): timestamp = util.timestamp() url = ''.join([ const.PAN_API_URL, - 'list?channel=chunlei&clienttype=8&web=1', + 'list?channel=chunlei', + '&clienttype=',const.PC_CLIENT_TYPE, + '&web=1', '&num=', str(num), '&t=', timestamp, '&page=', str(page), From b8787e6ae51d99625e248df097526538d59e67bd Mon Sep 17 00:00:00 2001 From: kang Date: Sat, 24 Sep 2016 02:16:55 +0800 Subject: [PATCH 03/32] =?UTF-8?q?=E5=B7=B2=E7=BB=8F=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=84=E7=A7=8D=E7=BD=91=E7=BB=9C=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bcloud/pcs.py | 70 ++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/bcloud/pcs.py b/bcloud/pcs.py index e480de6..032ca50 100644 --- a/bcloud/pcs.py +++ b/bcloud/pcs.py @@ -30,7 +30,7 @@ def get_quota(cookie, tokens): '''获取当前的存储空间的容量信息.''' url = ''.join([ const.PAN_API_URL, - 'quota?channel=chunlei&clienttype=0&web=1', + 'quota?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&t=', util.timestamp(), ]) req = net.urlopen(url, headers={'Cookie': cookie.header_output()}) @@ -61,7 +61,7 @@ def get_user_info(tokens, uk): ''' url = ''.join([ const.PAN_URL, - 'pcloud/user/getinfo?channel=chunlei&clienttype=0&web=1', + 'pcloud/user/getinfo?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&bdstoken=', tokens['bdstoken'], '&query_uk=', uk, '&t=', util.timestamp(), @@ -90,7 +90,7 @@ def list_share(cookie, tokens, uk, page=1): '&start=', str(start), '&limit=', str(num), '&query_uk=', str(uk), - '&channel=chunlei&clienttype=0&web=1', + '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&bdstoken=', tokens['bdstoken'], ]) req = net.urlopen(url, headers={ @@ -116,7 +116,7 @@ def list_share_files(cookie, tokens, uk, shareid, dirname, page=1): return list_share_single_file(cookie, tokens, uk, shareid) url = ''.join([ const.PAN_URL, - 'share/list?channel=chunlei&clienttype=0&web=1&num=50', + 'share/list?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1&num=50', '&t=', util.timestamp(), '&page=', str(page), '&dir=', encoder.encode_uri_component(dirname), @@ -199,7 +199,7 @@ def enable_share(cookie, tokens, fid_list): ''' url = ''.join([ const.PAN_URL, - 'share/set?channel=chunlei&clienttype=0&web=1', + 'share/set?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&bdstoken=', tokens['bdstoken'], ]) data = encoder.encode_uri( @@ -221,7 +221,7 @@ def disable_share(cookie, tokens, shareid_list): ''' url = ''.join([ const.PAN_URL, - 'share/cancel?channel=chunlei&clienttype=0&web=1', + 'share/cancel?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&bdstoken=', tokens['bdstoken'], ]) data = 'shareid_list=' + encoder.encode_uri(json.dumps(shareid_list)) @@ -243,9 +243,9 @@ def enable_private_share(cookie, tokens, fid_list): print('enable private share:', fid_list, cookie, tokens) url = ''.join([ const.PAN_URL, - 'share/set?channel=chunlei&clienttype=0&web=1', + 'share/set?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&bdstoken=', tokens['bdstoken'], - '&channel=chunlei&clienttype=0&web=1', + '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&appid=250528', ]) print('url:', url) @@ -276,7 +276,7 @@ def verify_share_password(uk, shareid, pwd, vcode=''): ''' url = ''.join([ const.PAN_URL, - 'share/verify?&clienttype=0&web=1&channel=chunlei', + 'share/verify?&clienttype=',const.PC_CLIENT_TYPE,'&web=1&channel=chunlei', '&shareid=', shareid, '&uk=', uk, ]) @@ -381,7 +381,7 @@ def share_transfer(cookie, tokens, shareid, uk, filelist, dest, upload_mode): ondup = const.UPLOAD_ONDUP[upload_mode] url = ''.join([ const.PAN_URL, - 'share/transfer?app_id=250528&channel=chunlei&clienttype=0&web=1', + 'share/transfer?app_id=250528&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&bdstoken=', tokens['bdstoken'], '&from=', uk, '&shareid=', shareid, @@ -412,7 +412,7 @@ def list_inbox(cookie, tokens, start=0, limit=20): '&start=', str(start), '&limit=', str(limit), '&_=', util.timestamp(), - '&channel=chunlei&clienttype=0&web=1', + '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&bdstoken=', tokens['bdstoken'], ]) req = net.urlopen(url, headers={'Cookie': cookie.header_output()}) @@ -433,7 +433,7 @@ def list_trash(cookie, tokens, path='/', page=1, num=100): ''' url = ''.join([ const.PAN_API_URL, - 'recycle/list?channel=chunlei&clienttype=0&web=1', + 'recycle/list?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&num=', str(num), '&t=', util.timestamp(), '&dir=', encoder.encode_uri_component(path), @@ -456,7 +456,7 @@ def restore_trash(cookie, tokens, fidlist): ''' url = ''.join([ const.PAN_API_URL, - 'recycle/restore?channel=chunlei&clienttype=0&web=1', + 'recycle/restore?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&t=', util.timestamp(), '&bdstoken=', tokens['bdstoken'], ]) @@ -480,7 +480,7 @@ def delete_trash(cookie, tokens, fidlist): ''' url = ''.join([ const.PAN_API_URL, - 'recycle/delete?channel=chunlei&clienttype=0&web=1', + 'recycle/delete?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&bdstoken=', tokens['bdstoken'], ]) data = 'fidlist=' + encoder.encode_uri_component(json.dumps(fidlist)) @@ -498,7 +498,7 @@ def clear_trash(cookie, tokens): '''清空回收站, 将里面的所有文件都删除.''' url = ''.join([ const.PAN_API_URL, - 'recycle/clear?channel=chunlei&clienttype=0&web=1', + 'recycle/clear?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&t=', util.timestamp(), '&bdstoken=', tokens['bdstoken'], ]) @@ -560,7 +560,7 @@ def mkdir(cookie, tokens, path): ''' url = ''.join([ const.PAN_API_URL, - 'create?a=commit&channel=chunlei&clienttype=0&web=1', + 'create?a=commit&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&bdstoken=', tokens['bdstoken'], ]) data = ''.join([ @@ -584,7 +584,7 @@ def delete_files(cookie, tokens, filelist): ''' url = ''.join([ const.PAN_API_URL, - 'filemanager?channel=chunlei&clienttype=0&web=1&opera=delete', + 'filemanager?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1&opera=delete', '&bdstoken=', tokens['bdstoken'], ]) data = 'filelist=' + encoder.encode_uri_component(json.dumps(filelist)) @@ -609,7 +609,7 @@ def rename(cookie, tokens, filelist): ''' url = ''.join([ const.PAN_API_URL, - 'filemanager?channel=chunlei&clienttype=0&web=1&opera=rename', + 'filemanager?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1&opera=rename', '&bdstoken=', tokens['bdstoken'], ]) data = 'filelist=' + encoder.encode_uri_component(json.dumps(filelist)) @@ -633,7 +633,7 @@ def move(cookie, tokens, filelist): ''' url = ''.join([ const.PAN_API_URL, - 'filemanager?channel=chunlei&clienttype=0&web=1&opera=move', + 'filemanager?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1&opera=move', '&bdstoken=', tokens['bdstoken'], ]) data = 'filelist=' + encoder.encode_uri_component(json.dumps(filelist)) @@ -657,7 +657,7 @@ def copy(cookie, tokens, filelist): ''' url = ''.join([ const.PAN_API_URL, - 'filemanager?channel=chunlei&clienttype=0&web=1&opera=copy', + 'filemanager?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1&opera=copy', '&bdstoken=', tokens['bdstoken'], ]) data = 'filelist=' + encoder.encode_uri_component(json.dumps(filelist)) @@ -687,7 +687,7 @@ def get_category(cookie, tokens, category, page=1): timestamp = util.timestamp() url = ''.join([ const.PAN_API_URL, - 'categorylist?channel=chunlei&clienttype=0&web=1', + 'categorylist?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&category=', str(category), '&pri=-1&num=100', '&t=', timestamp, @@ -899,7 +899,9 @@ def get_metas(cookie, tokens, filelist, dlink=True): filelist = [filelist, ] url = ''.join([ const.PAN_API_URL, - 'filemetas?channel=chunlei&clienttype=0&web=1', + 'filemetas?channel=chunlei', + '&clienttype=',const.PC_CLIENT_TYPE, + '&web=1', '&bdstoken=', tokens['bdstoken'], ]) if dlink: @@ -926,7 +928,9 @@ def search(cookie, tokens, key, path='/'): ''' url = ''.join([ const.PAN_API_URL, - 'search?channel=chunlei&clienttype=0&web=1', + 'search?channel=chunlei', + '&clienttype=',const.PC_CLIENT_TYPE, + '&web=1', '&dir=', path, '&key=', key, '&recursion', @@ -950,7 +954,8 @@ def cloud_add_link_task(cookie, tokens, source_url, save_path, ''' url = ''.join([ const.PAN_URL, - 'rest/2.0/services/cloud_dl?channel=chunlei&clienttype=0&web=1', + 'rest/2.0/services/cloud_dl?channel=chunlei', + '&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&bdstoken=', tokens['bdstoken'], ]) type_ = '' @@ -992,7 +997,8 @@ def cloud_add_bt_task(cookie, tokens, source_url, save_path, selected_idx, ''' url = ''.join([ const.PAN_URL, - 'rest/2.0/services/cloud_dl?channel=chunlei&clienttype=0&web=1', + 'rest/2.0/services/cloud_dl?channel=chunlei', + '&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&bdstoken=', tokens['bdstoken'], ]) type_ = '2' @@ -1033,7 +1039,7 @@ def cloud_query_sinfo(cookie, tokens, source_path): ''' url = ''.join([ const.PAN_URL, - 'rest/2.0/services/cloud_dl?channel=chunlei&clienttype=0&web=1', + 'rest/2.0/services/cloud_dl?channel=chunlei','&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&method=query_sinfo&app_id=250528', '&bdstoken=', tokens['bdstoken'], '&source_path=', encoder.encode_uri_component(source_path), @@ -1058,7 +1064,7 @@ def cloud_query_magnetinfo(cookie, tokens, source_url, save_path): ''' url = ''.join([ const.PAN_URL, - 'rest/2.0/services/cloud_dl?channel=chunlei&clienttype=0&web=1', + 'rest/2.0/services/cloud_dl?channel=chunlei','&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&bdstoken=', tokens['bdstoken'], ]) data = ''.join([ @@ -1082,7 +1088,7 @@ def cloud_list_task(cookie, tokens, start=0): ''' url = ''.join([ const.PAN_URL, - 'rest/2.0/services/cloud_dl?channel=chunlei&clienttype=0&web=1', + 'rest/2.0/services/cloud_dl?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&bdstoken=', tokens['bdstoken'], '&need_task_info=1&status=255', '&start=', str(start), @@ -1110,7 +1116,7 @@ def cloud_query_task(cookie, tokens, task_ids): '&bdstoken=', tokens['bdstoken'], '&task_ids=', ','.join(task_ids), '&t=', util.timestamp(), - '&channel=chunlei&clienttype=0&web=1', + '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', ]) req = net.urlopen(url, headers={'Cookie': cookie.header_output()}) if req: @@ -1132,7 +1138,7 @@ def cloud_cancel_task(cookie, tokens, task_id): '&task_id=', str(task_id), '&method=cancel_task&app_id=250528', '&t=', util.timestamp(), - '&channel=chunlei&clienttype=0&web=1', + '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', ]) req = net.urlopen(url, headers={'Cookie': cookie.header_output()}) if req: @@ -1153,7 +1159,7 @@ def cloud_delete_task(cookie, tokens, task_id): '&task_id=', str(task_id), '&method=delete_task&app_id=250528', '&t=', util.timestamp(), - '&channel=chunlei&clienttype=0&web=1', + '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', ]) req = net.urlopen(url, headers={'Cookie': cookie.header_output()}) if req: @@ -1167,7 +1173,7 @@ def cloud_clear_task(cookie, tokens): url = ''.join([ const.PAN_URL, 'rest/2.0/services/cloud_dl?method=clear_task&app_id=250528', - '&channel=chunlei&clienttype=0&web=1', + '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', '&t=', util.timestamp(), '&bdstoken=', tokens['bdstoken'], ]) From 87f628c019df4e9031158ccf1e536912532d9566 Mon Sep 17 00:00:00 2001 From: kang Date: Fri, 7 Oct 2016 22:55:49 +0800 Subject: [PATCH 04/32] =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E9=9C=80=E8=A6=81=E8=A7=A3=E5=86=B3=EF=BC=8C?= =?UTF-8?q?=E8=80=83=E8=99=91=E6=94=B9=E5=86=99Qt=E5=90=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bcloud/SigninDialog.py | 6 ++++ bcloud/auth.py | 78 +++++++++++++++++++++++++----------------- bcloud/const.py | 2 +- 3 files changed, 54 insertions(+), 32 deletions(-) diff --git a/bcloud/SigninDialog.py b/bcloud/SigninDialog.py index b789fc8..7611eb7 100644 --- a/bcloud/SigninDialog.py +++ b/bcloud/SigninDialog.py @@ -340,6 +340,12 @@ def on_post_login(info, error=None): (info, error)) self.signin_failed( _('Does not support SMS/Email verification!')) + # 选择验证方式 + elif errno == 120021: + logger.error('SigninDialog.on_post_login: %s, %s' % + (info, error)) + self.signin_failed( + _('Does not support SMS/Email verification!')) else: logger.error('SigninDialog.on_post_login: %s, %s' % (info, error)) diff --git a/bcloud/auth.py b/bcloud/auth.py index 602d5d4..437e98a 100644 --- a/bcloud/auth.py +++ b/bcloud/auth.py @@ -1,4 +1,3 @@ - # Copyright (C) 2014-2015 LiuLang # Use of this source code is governed by GPLv3 license that can be found # in http://www.gnu.org/licenses/gpl-3.0.html @@ -22,10 +21,12 @@ from bcloud.RequestCookie import RequestCookie from bcloud import util + def get_ppui_logintime(): '''ppui_ligintime 这个字段, 是一个随机数.''' return str(random.randint(52000, 58535)) + def get_BAIDUID(): '''获取一个cookie - BAIDUID. @@ -43,6 +44,7 @@ def get_BAIDUID(): else: return None + def get_token(cookie): '''获取一个页面访问的token, 这里需要之前得到的BAIDUID 这个cookie值 @@ -66,7 +68,7 @@ def get_token(cookie): '&tt=', util.timestamp(), '&class=login&logintype=basicLogin', ]) - headers={ + headers = { 'Cookie': cookie.header_output(), 'Accept': const.ACCEPT_HTML, 'Cache-control': 'max-age=0', @@ -79,6 +81,7 @@ def get_token(cookie): return cookie, content_obj['data']['token'] return None + def get_UBI(cookie, tokens): '''检查登录历史, 可以获得一个Cookie - UBI. 返回的信息类似于: @@ -91,7 +94,7 @@ def get_UBI(cookie, tokens): '&tpl=pp&apiver=v3', '&tt=', util.timestamp(), ]) - headers={ + headers = { 'Cookie': cookie.header_output(), 'Referer': const.REFERER, } @@ -101,6 +104,7 @@ def get_UBI(cookie, tokens): else: return None + def check_login(cookie, tokens, username): '''进行登录验证, 主要是在服务器上验证这个帐户的状态. @@ -118,7 +122,7 @@ def check_login(cookie, tokens, username): '&username=', encoder.encode_uri_component(username), '&isphone=false', ]) - headers={ + headers = { 'Cookie': cookie.header_output(), 'Referer': const.REFERER, } @@ -129,6 +133,7 @@ def check_login(cookie, tokens, username): else: return None + def get_signin_vcode(cookie, codeString): '''获取登录时的验证码图片. @@ -139,7 +144,7 @@ def get_signin_vcode(cookie, codeString): 'cgi-bin/genimage?', codeString, ]) - headers={ + headers = { 'Cookie': cookie.header_output(), 'Referer': const.REFERER, } @@ -149,6 +154,7 @@ def get_signin_vcode(cookie, codeString): else: return None + def refresh_signin_vcode(cookie, tokens, vcodetype): '''刷新验证码. @@ -163,7 +169,7 @@ def refresh_signin_vcode(cookie, tokens, vcodetype): '&fr=ligin', '&vcodetype=', encoder.encode_uri(vcodetype), ]) - headers={ + headers = { 'Cookie': cookie.header_output(), 'Referer': const.REFERER, } @@ -178,6 +184,7 @@ def refresh_signin_vcode(cookie, tokens, vcodetype): logger.error(traceback.format_exc()) return None + def get_public_key(cookie, tokens): '''获取RSA公钥, 这个用于加密用户的密码 @@ -189,7 +196,7 @@ def get_public_key(cookie, tokens): '?token=', tokens['token'], '&tpl=pp&apiver=v3&tt=', util.timestamp(), ]) - headers={ + headers = { 'Cookie': cookie.header_output(), 'Referer': const.REFERER, } @@ -199,6 +206,7 @@ def get_public_key(cookie, tokens): return util.json_loads_single(req.data.decode()) return None + def post_login(cookie, tokens, username, password, rsakey, verifycode='', codestring=''): '''登录验证. @@ -230,43 +238,50 @@ def post_login(cookie, tokens, username, password, rsakey, verifycode='', '&mem_pass=on', '&rsakey=', rsakey, '&crypttype=12', - '&ppui_logintime=',get_ppui_logintime(), + '&ppui_logintime=', get_ppui_logintime(), '&callback=parent.bd__pcbs__28g1kg', ]) - headers={ + headers = { 'Accept': const.ACCEPT_HTML, - 'Cookie': cookie.sub_output('BAIDUID','HOSUPPORT', 'UBI'), + 'Cookie': cookie.sub_output('BAIDUID', 'HOSUPPORT', 'UBI'), 'Referer': const.REFERER, 'Connection': 'Keep-Alive', } req = net.urlopen(url, headers=headers, data=data.encode()) if req: - content= req.data.decode() - match = re.search('"(err_no[^"]+)"', content) - if not match: - return (-1, None) - query = dict(urllib.parse.parse_qsl(match.group(1))) - query['err_no'] = int(query['err_no']) - err_no = query['err_no'] - auth_cookie = req.headers.get_all('Set-Cookie') - - if err_no == 0: - return (0, auth_cookie) - # #!! not bind cellphone - elif err_no == 18: - return (0, auth_cookie) - # 要输入验证码 - elif err_no == 257: - return (err_no, query) - # 需要短信验证 - elif err_no == 400031: - return (err_no, query) + if req.getcode() == 200: + content = req.data.decode() + match = re.search('"(err_no[^"]+)"', content) + if not match: + return (-1, None) + query = dict(urllib.parse.parse_qsl(match.group(1))) + query['err_no'] = int(query['err_no']) + err_no = query['err_no'] + auth_cookie = req.headers.get_all('Set-Cookie') + + if err_no == 0: + return (0, auth_cookie) + # #!! not bind cellphone + elif err_no == 18: + return (0, auth_cookie) + # 要输入验证码 + elif err_no == 257: + return (err_no, query) + # 需要短信验证 + elif err_no == 400031: + return (err_no, query) + # 选择验证方式 + elif err_no == 120021: + return (err_no, query) + else: + return (err_no, None) else: - return (err_no, None) + return (-1, req.getcode()) else: return (-1, None) return (-1, None) + def parse_bdstoken(content): '''从页面中解析出bdstoken等信息. @@ -282,6 +297,7 @@ def parse_bdstoken(content): bdstoken = bds_match.group(1) return bdstoken + def get_bdstoken(cookie): '''从/disk/home页面获取bdstoken等token信息 diff --git a/bcloud/const.py b/bcloud/const.py index 092145e..6b9a648 100644 --- a/bcloud/const.py +++ b/bcloud/const.py @@ -12,7 +12,7 @@ _ = Config._ BAIDU_URL = 'http://www.baidu.com/' -PASSPORT_BASE = 'https://passport.baidu.com/' +PASSPORT_BASE = 'http://passport.baidu.com/' PASSPORT_URL = PASSPORT_BASE + 'v2/api/' PASSPORT_LOGIN = PASSPORT_BASE + 'v2/api/?login' REFERER = PASSPORT_BASE + 'v2/?login' From 827b3b3f6d63830b0ecf607ee33a30e0520c4db1 Mon Sep 17 00:00:00 2001 From: kang Date: Fri, 18 Nov 2016 18:01:54 +0800 Subject: [PATCH 05/32] =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bcloud/Config.py | 9 ++++++--- bcloud/SigninDialog.py | 21 ++++++++++++++++++--- bcloud/__init__.py | 2 +- bcloud/auth.py | 10 +++++----- bcloud/const.py | 4 ++-- bcloud/net.py | 2 +- 6 files changed, 33 insertions(+), 15 deletions(-) diff --git a/bcloud/Config.py b/bcloud/Config.py index 3ef9d0a..fbaec74 100644 --- a/bcloud/Config.py +++ b/bcloud/Config.py @@ -35,8 +35,10 @@ DBUS_APP_NAME = 'org.liulang.bcloud' APPNAME = 'BCloud' VERSION = bcloud.__version__ -HOMEPAGE = 'https://github.com/LiuLang/bcloud' -# https://github.com/LiuLang/bcloud/pulls +''' +LiuLang大神不知什么原因不再维护该代码了。我来试试 +''' +HOMEPAGE = 'https://github.com/Yufeikang/bcloud' AUTHORS = [ 'Alexzhang ', 'Aetf ', @@ -50,8 +52,9 @@ 'Zhenbo Li ', 'slawdan ', 'Zihao Wang ', + 'Kang ' ] -COPYRIGHT = 'Copyright (c) 2014-2015 LiuLang' +COPYRIGHT = 'Copyright (c) 2014-2016 LiuLang' DESCRIPTION = _('Baidu Pan client for GNU/Linux desktop users.') CACHE_DIR = os.path.join(HOME_DIR, '.cache', NAME) diff --git a/bcloud/SigninDialog.py b/bcloud/SigninDialog.py index 7611eb7..b9cc62f 100644 --- a/bcloud/SigninDialog.py +++ b/bcloud/SigninDialog.py @@ -340,12 +340,27 @@ def on_post_login(info, error=None): (info, error)) self.signin_failed( _('Does not support SMS/Email verification!')) - # 选择验证方式 + # 登录失败,请在弹出的窗口操作,或重新登录 elif errno == 120021: logger.error('SigninDialog.on_post_login: %s, %s' % (info, error)) self.signin_failed( - _('Does not support SMS/Email verification!')) + _('NET:登录失败,请在弹出的窗口操作,或重新登录')) + elif errno == 120019: + logger.error('SigninDialog.on_post_login: %s, %s' % + (info, error)) + self.signin_failed( + _('NET:近期登录次数过多, 请先通过 passport.baidu.com 解除锁定')) + elif errno == 500010: + logger.error('SigninDialog.on_post_login: %s, %s' % + (info, error)) + self.signin_failed( + _('NET:登录过于频繁,请24小时后再试')) + elif errno == 400031: + logger.error('SigninDialog.on_post_login: %s, %s' % + (info, error)) + self.signin_failed( + _('NET:账号异常,请在当前网络环境下在百度网页端正常登录一次')) else: logger.error('SigninDialog.on_post_login: %s, %s' % (info, error)) @@ -387,7 +402,7 @@ def on_check_login(info, error=None): codeString = dialog.codeString dialog.destroy() '''中文验证码长度为2,英文验证码长度为4''' - if not verifycode or len(verifycode) != 4 or len(verifycode) != 2: + if not verifycode or (len(verifycode) != 4 and len(verifycode) != 2): self.signin_failed(_('Please input verification code!')) return else: diff --git a/bcloud/__init__.py b/bcloud/__init__.py index 2aadf97..cf9447f 100644 --- a/bcloud/__init__.py +++ b/bcloud/__init__.py @@ -3,4 +3,4 @@ # Use of this source code is governed by GPLv3 license that can be found # in http://www.gnu.org/licenses/gpl-3.0.html -__version__ = '3.8.2' +__version__ = '3.9.0' diff --git a/bcloud/auth.py b/bcloud/auth.py index 437e98a..3b93571 100644 --- a/bcloud/auth.py +++ b/bcloud/auth.py @@ -222,15 +222,15 @@ def post_login(cookie, tokens, username, password, rsakey, verifycode='', ''' url = const.PASSPORT_LOGIN data = ''.join([ - 'staticpage=https%3A%2F%2Fpassport.baidu.com%2Fstatic%2Fpasspc-account%2Fhtml%2Fv3Jump.html', + 'staticpage=http://www.baidu.com/cache/user/html/v3Jump.html', '&charset=UTF-8', '&token=', tokens['token'], '&tpl=pp&subpro=&apiver=v3', '&tt=', util.timestamp(), '&codestring=', codestring, - '&safeflg=0&u=http%3A%2F%2Fpassport.baidu.com%2F', - '&isPhone=', - '&quick_user=0&logintype=basicLogin&logLoginType=pc_loginBasic&idc=', + '&safeflg=0&u=http%3A%2F%2Fwww.baidu.com%2F', + '&isPhone=false', + '&quick_user=0&logintype=baseLogin&logLoginType=pc_loginBasic&idc=', '&loginmerge=true', '&username=', encoder.encode_uri_component(username), '&password=', encoder.encode_uri_component(password), @@ -270,7 +270,7 @@ def post_login(cookie, tokens, username, password, rsakey, verifycode='', # 需要短信验证 elif err_no == 400031: return (err_no, query) - # 选择验证方式 + # 登录失败,请在弹出的窗口操作,或重新登录 elif err_no == 120021: return (err_no, query) else: diff --git a/bcloud/const.py b/bcloud/const.py index 6b9a648..7fc33a0 100644 --- a/bcloud/const.py +++ b/bcloud/const.py @@ -12,7 +12,7 @@ _ = Config._ BAIDU_URL = 'http://www.baidu.com/' -PASSPORT_BASE = 'http://passport.baidu.com/' +PASSPORT_BASE = 'https://passport.baidu.com/' PASSPORT_URL = PASSPORT_BASE + 'v2/api/' PASSPORT_LOGIN = PASSPORT_BASE + 'v2/api/?login' REFERER = PASSPORT_BASE + 'v2/?login' @@ -33,7 +33,7 @@ ## 以下常量是模拟的PC客户端的参数. CHANNEL_URL = 'https://channel.api.duapp.com/rest/2.0/channel/channel?' -PC_USER_AGENT = 'netdisk;4.5.0.7;PC;PC-Windows;5.1.2600;WindowsBaiduYunGuanJia' +PC_USER_AGENT = 'netdisk;5.2.7.2;PC;PC-Windows;5.1.2600;WindowsBaiduYunGuanJia' PC_DEVICE_ID = '08002788772E' PC_DEVICE_NAME = '08002788772E' PC_DEVICE_TYPE = '2' diff --git a/bcloud/net.py b/bcloud/net.py index 2305a48..ca888df 100644 --- a/bcloud/net.py +++ b/bcloud/net.py @@ -20,7 +20,7 @@ TIMEOUT = 50 default_headers = { - 'User-agent': const.USER_AGENT, + 'User-agent': const.PC_USER_AGENT, 'Referer': const.PAN_REFERER, #'x-requested-with': 'XMLHttpRequest', 'Accept': const.ACCEPT_JSON, From ed162ebce6a62e10ac4930382dcca92a1e0946c6 Mon Sep 17 00:00:00 2001 From: kang Date: Fri, 25 Nov 2016 11:29:43 +0800 Subject: [PATCH 06/32] =?UTF-8?q?=E5=A4=B4=E5=83=8F=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bcloud/Downloader.py | 40 +++++++++--------- bcloud/__init__.pyc | Bin 0 -> 179 bytes bcloud/__pycache__/App.cpython-35.pyc | Bin 0 -> 18545 bytes .../BTBrowserDialog.cpython-35.pyc | Bin 0 -> 4805 bytes .../__pycache__/CategoryPage.cpython-35.pyc | Bin 0 -> 7730 bytes bcloud/__pycache__/CloudPage.cpython-35.pyc | Bin 0 -> 14709 bytes bcloud/__pycache__/Config.cpython-35.pyc | Bin 0 -> 3891 bytes .../__pycache__/DownloadPage.cpython-35.pyc | Bin 0 -> 27575 bytes bcloud/__pycache__/Downloader.cpython-35.pyc | Bin 0 -> 9007 bytes bcloud/__pycache__/ErrorMsg.cpython-35.pyc | Bin 0 -> 5942 bytes bcloud/__pycache__/FileWatcher.cpython-35.pyc | Bin 0 -> 5533 bytes .../FolderBrowserDialog.cpython-35.pyc | Bin 0 -> 4435 bytes bcloud/__pycache__/HomePage.cpython-35.pyc | Bin 0 -> 13814 bytes bcloud/__pycache__/IconWindow.cpython-35.pyc | Bin 0 -> 26682 bytes .../__pycache__/MimeProvider.cpython-35.pyc | Bin 0 -> 2847 bytes .../NewFolderDialog.cpython-35.pyc | Bin 0 -> 3779 bytes .../PreferencesDialog.cpython-35.pyc | Bin 0 -> 12410 bytes .../PropertiesDialog.cpython-35.pyc | Bin 0 -> 4072 bytes .../__pycache__/RenameDialog.cpython-35.pyc | Bin 0 -> 4024 bytes .../__pycache__/RequestCookie.cpython-35.pyc | Bin 0 -> 1776 bytes bcloud/__pycache__/SharePage.cpython-35.pyc | Bin 0 -> 14089 bytes bcloud/__pycache__/Shutdown.cpython-35.pyc | Bin 0 -> 2825 bytes .../__pycache__/SigninDialog.cpython-35.pyc | Bin 0 -> 16766 bytes bcloud/__pycache__/TrashPage.cpython-35.pyc | Bin 0 -> 8313 bytes bcloud/__pycache__/UploadPage.cpython-35.pyc | Bin 0 -> 24858 bytes bcloud/__pycache__/Uploader.cpython-35.pyc | Bin 0 -> 4817 bytes bcloud/__pycache__/VCodeDialog.cpython-35.pyc | Bin 0 -> 2236 bytes bcloud/__pycache__/Widgets.cpython-35.pyc | Bin 0 -> 1528 bytes bcloud/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 166 bytes bcloud/__pycache__/auth.cpython-35.pyc | Bin 0 -> 8902 bytes bcloud/__pycache__/const.cpython-35.pyc | Bin 0 -> 3867 bytes bcloud/__pycache__/decoder.cpython-35.pyc | Bin 0 -> 1778 bytes bcloud/__pycache__/encoder.cpython-35.pyc | Bin 0 -> 3223 bytes bcloud/__pycache__/gutil.cpython-35.pyc | Bin 0 -> 10420 bytes bcloud/__pycache__/hasher.cpython-35.pyc | Bin 0 -> 2310 bytes bcloud/__pycache__/log.cpython-35.pyc | Bin 0 -> 964 bytes bcloud/__pycache__/net.cpython-35.pyc | Bin 0 -> 6032 bytes bcloud/__pycache__/pcs.cpython-35.pyc | Bin 0 -> 35954 bytes bcloud/__pycache__/util.cpython-35.pyc | Bin 0 -> 7416 bytes bcloud/gutil.py | 4 +- bcloud/log.py | 11 +++-- bcloud/pcs.py | 2 +- 42 files changed, 31 insertions(+), 26 deletions(-) create mode 100644 bcloud/__init__.pyc create mode 100644 bcloud/__pycache__/App.cpython-35.pyc create mode 100644 bcloud/__pycache__/BTBrowserDialog.cpython-35.pyc create mode 100644 bcloud/__pycache__/CategoryPage.cpython-35.pyc create mode 100644 bcloud/__pycache__/CloudPage.cpython-35.pyc create mode 100644 bcloud/__pycache__/Config.cpython-35.pyc create mode 100644 bcloud/__pycache__/DownloadPage.cpython-35.pyc create mode 100644 bcloud/__pycache__/Downloader.cpython-35.pyc create mode 100644 bcloud/__pycache__/ErrorMsg.cpython-35.pyc create mode 100644 bcloud/__pycache__/FileWatcher.cpython-35.pyc create mode 100644 bcloud/__pycache__/FolderBrowserDialog.cpython-35.pyc create mode 100644 bcloud/__pycache__/HomePage.cpython-35.pyc create mode 100644 bcloud/__pycache__/IconWindow.cpython-35.pyc create mode 100644 bcloud/__pycache__/MimeProvider.cpython-35.pyc create mode 100644 bcloud/__pycache__/NewFolderDialog.cpython-35.pyc create mode 100644 bcloud/__pycache__/PreferencesDialog.cpython-35.pyc create mode 100644 bcloud/__pycache__/PropertiesDialog.cpython-35.pyc create mode 100644 bcloud/__pycache__/RenameDialog.cpython-35.pyc create mode 100644 bcloud/__pycache__/RequestCookie.cpython-35.pyc create mode 100644 bcloud/__pycache__/SharePage.cpython-35.pyc create mode 100644 bcloud/__pycache__/Shutdown.cpython-35.pyc create mode 100644 bcloud/__pycache__/SigninDialog.cpython-35.pyc create mode 100644 bcloud/__pycache__/TrashPage.cpython-35.pyc create mode 100644 bcloud/__pycache__/UploadPage.cpython-35.pyc create mode 100644 bcloud/__pycache__/Uploader.cpython-35.pyc create mode 100644 bcloud/__pycache__/VCodeDialog.cpython-35.pyc create mode 100644 bcloud/__pycache__/Widgets.cpython-35.pyc create mode 100644 bcloud/__pycache__/__init__.cpython-35.pyc create mode 100644 bcloud/__pycache__/auth.cpython-35.pyc create mode 100644 bcloud/__pycache__/const.cpython-35.pyc create mode 100644 bcloud/__pycache__/decoder.cpython-35.pyc create mode 100644 bcloud/__pycache__/encoder.cpython-35.pyc create mode 100644 bcloud/__pycache__/gutil.cpython-35.pyc create mode 100644 bcloud/__pycache__/hasher.cpython-35.pyc create mode 100644 bcloud/__pycache__/log.cpython-35.pyc create mode 100644 bcloud/__pycache__/net.cpython-35.pyc create mode 100644 bcloud/__pycache__/pcs.cpython-35.pyc create mode 100644 bcloud/__pycache__/util.cpython-35.pyc diff --git a/bcloud/Downloader.py b/bcloud/Downloader.py index 32c2616..1b7caa3 100644 --- a/bcloud/Downloader.py +++ b/bcloud/Downloader.py @@ -1,4 +1,3 @@ - # Copyright (C) 2014-2015 LiuLang # Use of this source code is governed by GPLv3 license that can be found # in http://www.gnu.org/licenses/gpl-3.0.html @@ -23,18 +22,19 @@ from bcloud import util from bcloud.log import logger -CHUNK_SIZE = 131072 # 128K -RETRIES = 3 # 连接失败时的重试次数 -DOWNLOAD_RETRIES = 10 # 下载线程的重试次数 +CHUNK_SIZE = 131072 # 128K +RETRIES = 3 # 连接失败时的重试次数 +DOWNLOAD_RETRIES = 10 # 下载线程的重试次数 THRESHOLD_TO_FLUSH = 500 # 磁盘写入数据次数超过这个值时, 就进行一次同步. -SMALL_FILE_SIZE = 1048576 # 1M, 下载小文件时用单线程下载 +SMALL_FILE_SIZE = 1048576 # 1M, 下载小文件时用单线程下载 (NAME_COL, PATH_COL, FSID_COL, SIZE_COL, CURRSIZE_COL, LINK_COL, - ISDIR_COL, SAVENAME_COL, SAVEDIR_COL, STATE_COL, STATENAME_COL, - HUMANSIZE_COL, PERCENT_COL) = list(range(13)) + ISDIR_COL, SAVENAME_COL, SAVEDIR_COL, STATE_COL, STATENAME_COL, + HUMANSIZE_COL, PERCENT_COL) = list(range(13)) BATCH_FINISISHED, BATCH_ERROR = -1, -2 + def get_tmp_filepath(dir_name, save_name): '''返回最终路径名及临时路径名''' filepath = os.path.join(dir_name, save_name) @@ -42,7 +42,6 @@ def get_tmp_filepath(dir_name, save_name): class DownloadBatch(threading.Thread): - def __init__(self, id_, queue, url, lock, start_size, end_size, fh, timeout): super().__init__() @@ -102,16 +101,16 @@ def download(self): if block: break except (OSError, AttributeError): - #self.queue.put((self.id_, BATCH_ERROR), block=False) + # self.queue.put((self.id_, BATCH_ERROR), block=False) logger.error(traceback.format_exc()) req = None - except : - req=None - logger.error( 'Time out occured.') - #self.queue.put((self.id_, BATCH_ERROR), block=False) - #return + except: + req = None + logger.error('Time out occured.') + # self.queue.put((self.id_, BATCH_ERROR), block=False) + # return + - else: logger.error('DownloadBatch, block is empty: %s, %s, %s, %s' % (offset, self.start_size, self.end_size, @@ -125,7 +124,7 @@ def download(self): self.fh.seek(offset) self.fh.write(block) self.queue.put((self.id_, len(block)), block=False) - offset = offset + len(block) + offset += len(block) # 下载完成 if offset >= self.end_size: self.queue.put((self.id_, BATCH_FINISISHED), block=False) @@ -140,13 +139,13 @@ class Downloader(threading.Thread, GObject.GObject): ''' __gsignals__ = { - 'started': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (str, )), + 'started': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (str,)), 'received': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (str, GObject.TYPE_INT64, GObject.TYPE_INT64)), - 'downloaded': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (str, )), + 'downloaded': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (str,)), # FSID, tmp-filepath 'disk-error': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (str, str)), - 'network-error': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (str, )), + 'network-error': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (str,)), } def __init__(self, parent, row): @@ -166,7 +165,7 @@ def download(self): if not os.path.exists(row[SAVEDIR_COL]): os.makedirs(row[SAVEDIR_COL], exist_ok=True) filepath, tmp_filepath, conf_filepath = get_tmp_filepath( - row[SAVEDIR_COL], row[SAVENAME_COL]) + row[SAVEDIR_COL], row[SAVENAME_COL]) if os.path.exists(filepath): if self.download_mode == DownloadMode.IGNORE: @@ -323,4 +322,5 @@ def stop(self): '''停止下载, 并删除之前下载的片段''' self.row[STATE_COL] = State.CANCELED + GObject.type_register(Downloader) diff --git a/bcloud/__init__.pyc b/bcloud/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..edd8cb126059d381b967f3624046d35e29733cad GIT binary patch literal 179 zcmZSn%*z#;`ZPS50SXv_v;zsk|K+FID_#r4w literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/App.cpython-35.pyc b/bcloud/__pycache__/App.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3b3c0f56627d7574f55d414bbc14a29fc51920a4 GIT binary patch literal 18545 zcmbV!Yj9-Mo!`0LtyXud^`1AwAl?X=2Ocm6#(+lB%xJBV#7M)K8}Oyo_eyH1ADVNo z=Fw($*^F(#UK_h?vo_!d8>nDs4J0Pm7%-_yQkBQ%Ybv>4Gtw|s`z5K$7uTke-|v6! zy=rL`*X~N{)8~E9`Jey${I7O&b{0;1t7lGrNvZ##T7HViKaP+8Z&FIR__I`1DLctq z%C_SAl(JKCKCSF@oX;pbqr8k-Y*Q{eq}An=vN%^pRkNzruIzSGZj*9O**R0rN;$9W zyeYR!xuEQVvZDENt@Gujy+hd@Nqa%L9m(^G(q2?{(ahJWs-3FVrR*;B?^281>asGq z9%c8)^1Gx}BjCV*a6_kEBWm%TDQ!U=7ytG>U9D#Y+ zQr1&-OMRK(J*@OZ$}6bF`wg5QP~PX2dlNh1?`fdPgUbGbvL90R!^#~{_9M#0PLC*W zn_B#$@;cPwqiXRn<@K{TmsWGYzQ>h&i*j#OUsK9^T#aBNdq^F3Z&U8=tV0THvyT#S zrw8x2M%11N)5qPVX8Q1fLxYwEUaLV1Rh0(5GRMa&v-oa5J~_MSl>^iVOX!tFuP{5& z2r6?Io9ROb9zT``aKXY-}W0(1rpi)I9 zTW!qGdm6b+R8u@zsd-bnajxP@eeaa^<~;4y%bq_{DWN|)TX!SL4_6y2?o?@>GZsf0 z=j+u*DK6(uG%$^6%TF(qbX+J-SLW-LdNNghMwk4BsAu8ya?2duXG%eN;aH{W4KI}H z@|ez{<>j%uTPc@*I){Gi;ZEkAmMtK(AhO5cjF zGCs*q8*-211;efN~E?9`hek?tPNK zS-GE6?qSK_qTKtH`+($cRW2CBgOa~ZxnEH3Lz2H;xnK~FNFEC~qTDY^{!ZmSs@%sU zkHvsB3`u^F%bp%Q8m55@6Z8M&Z}{`Kk6k0y&cFI&{(SgYg2SvOQVR|*B9q{40Jeq` z1-k+cE9JB?g;ZP2^7xr=7g@7jo0i(#rrM0u=B3sZ0&##A3QKI8(0shz?gu3utSpDQ zQaPxcD+QjN^A}bE7qmXu5s?cvQzboC8g+dWM(G@fc8(l9J?#ulO*s=oCr86{X?Zzp z2V<&}n{_qn4l0~@`tGP4KP8MS;)jJDbKnB!$qo#&^1bTZIyq|6c$jmXO1%;|&KOF5 z0g1A1uy*h_)huF}2jUK8QXPN#@FD*cAb%G$XMh}})FP+_QX>$30g%0H0Ms7AcQL2f z3BY5g0&9^&>U2m$F&@w<13*L~U1Yv)wFu%7{&QJb9MdbEdevf|3LsTLCuy}CyorsA zsNODf?nqVy>9#8#vRgSq4^dYXZ-|>f4Cah)Oimt?q1Ir`K2r-`cvCcjn~CNbP~7^> zYVj5o+^T}x)Z*=G@eXx4o%FywSs8by%oE(D76-XAK=hfnahc20GXl>qYHxKAa;@a7pZkCyzN%)o=yXyZH9={D8i>j(Ukc;csJ`On0>;c40IS6T)?9S;V^L`UYtgP#>h<8+>tVI`v6 z;;bz4*<=spxVI|}Kuu3FZqj2;R9&diAjKYaDPe4Y&K=Tq-arQr!svy#7W08#du0O^ zwYaD*w~69EJ$UEDjNJiQ5sR2+$N5Sf@@KzaX?o2feBpv>Sky!dzEvZYj?CLv(0WydtiB8yKUyEnhrEpf+nAMz()xMyKQKeb$Qm6m<=;e ztW<(#jumH-3p-k7(RV<9cQkYbOA}d%F3Y8Ir9OX+s-B(o7j&h*bj;40 z&4>UF+iDH$N#D*MnK6jZFkeCH)Jrw*+Fdeks#=0(9%cgXLST2#HMBRc8!L6!(etw< zyS*%$vun4Xt}oRgw(Zoh2bw*xpxy6!bETDPFu0^MoNb%$1(eJ&wBz z_48cJ%z{_*!VZ`iPBf2QkmUtzu=_BPhlTiFNtYL#v{nj>8%kYVms`?Hj+wf5Xnl=m1Rq582(tz`>>lZF_T~^bG(8A* z_sHn6q0{3t&eW;NV`Jl^_V(6(31q_zH)?m8nWq|lh02Yc9Uh&S89f!YLDgUO?QZid zXE|=)y8x5P2`WL=n=NVQ{DN0^YNZR68lLZJo>sU6XICp#>P|G)oV9yhy+LHxE|gq1 z>T7orp8;q;07L`3ID*`W*`jZ!hsMXlo{>|NQ_jrLspF$F&iL5$j98U+VFUw*puk}d znc>N)r^1^zEyK(VN^xRJ(P=I>bJDA?gjsWrq2<^`!V5*Gh6Wp^Ty44PnW@8@Flh@N zIK(kj#i$l-#?*#4pd})a>pF(JIgEsMebX*9k(91$vD>CfbAH6MXybz2G1)?F zxhF?Y&5R8XjfcHNS3kH|^?-17p_)9QT&|XU-|nBDd1`#r86F>+o_40kMn;bgow74% zzt8R~FI1|;<^bDlEPFb*Xm?GQb)#DKT!SihVX6VrxkxM9ZkrgzL+#!LU-}RwmZjA$ zfbf@$@@wbEVGd5inDxT6ALuZ1>iE&2u(Mt|=g?5}*<$BrwC6op@y^?wvU;#N0j}u> zUDy=u?gg&|tKE0bRs70q6(q>j28~8Fs4SDdR%-RIV`g%4d}eIQ8J--s`-Z)0^%STS z7QUXUT$o*%v$GdURd6r6D}L&*8JH8=|W1OJS}aYDkoc6u2Uwej|t!Ow+fGb#0%RtjNdc?76 zY2LTnpB$SWJ32l(*r)e{>hzstRTM6U%KEM+D!XeV?byXuat>IrO7s`dV<^`z2w0`0tvOr5YvNb zeF7i8Fy?XsTKcB|7WT7{G;v#t|$d8>f>?dZ87O%*X> zAN!!CAEiEPM|vOn?ZA9RnW<>)igKKVb7Kz7z8g>8jqmM}c3VB^Zdu0;^l0`CL6DQ@ zted3e*h1ttdEqcV{xe9Z!6Mr)8R%${m1Zo)sGz7A@751XAGE-RKuaKI7Ysk>{Q4rm4VNv*gv;#!zh24aBX^kAyFcVwluJP>Vr zK)7~27zi2zZpB}k7|iN>@sKbBUb(D!L}AB@xDgHQ6>zeYn!0f@?4;*H$dhFG$98`Y z=J^;O<3~snm-yMR^VmDFVdq2`+4(kP%+9f4n0Pb<k0T$$oKk*5EE=J-K5 zK8S22*&Fpkeq?VO{84xk4SsA=h`@o-XDNM1mLe$cWL3Q=MKNhno1^I6UFSC=YypUnycZOElOk9 z7b&Tx4!o_Qfe?|BXo~%D5kg}jFdC_#ls?JlX9RX(78Dw+`0#~A>%c)a&Tl@uhcV(m zN-IG_RLV-d8S%OOB=Tn0itoV;)Jyxtc4+43D%ubBgNlyL z3~n>0y8{3RHi9JE6ILO<#8^qtUuF-{;kQw9iF60YFjVNBJ<{DEhC|^QcEl6lt_Gq2 z!-)uDh=fHK9F1zEF!DT<=^7OS&o+y5usA)--cKV5J6D!r#(I%TW5_sb$hd}f*p4Ct zKyv8Z26M=}5N5dd%_#X5boj6M_~h+m>3tBig%ri@4(6D|_9EW{@!8x# zZg9P{N$_=pkQ~6&JS?mpZW*|?gx#AOAnuWfqBj`wV1i`ac23k=*h>*t6nVCJ7muRn z|HQ{9iEtOqJ&`!t!n7)<*$F@VPIxmpVYEi$v;i_xVxtf**ox51AT*@52Cyu)7BAqXJiT}9fK!sYBNR#HoMSMxf@*c; zqwlPK{e#taE?<57TdTi&dF@-Tto`8kS6_Q)^^+eSTzln(D<6Gu@4%Ih-n#PpPp|y; zn^!*m`GG=VAo}_2(;r`Z;V;nq@vEyJf4KU>@2>pz`76Ku<+bNuTKm>7FvZ%>UobPQ zzWL$RSHHIU?uVbf`;)adzL88YF_<$jeHZA1wG9 zXoX9xNbr-ae25DXb#f9#v2i1dFSIU%*2OSG=TMlb@P0HC&=Ha0oUn2mE4oaDixY2> zltXyV-{E7_qHNyE2y5@QvR3o;xEy1nA3d~i8)PuK4SC#f3CXT(VVN0 z8;{U52rieS^DSzVgO&+oV+Xj3WdM*`xVum!G|$b*y_t0m=FPbXA0xNabtZJJXdemm zOA(C1|MXc_lkX*BGqU}&FqBF)Kg>ot>m~q?Vn_ip&*$X~$=k3aO3j^MOU+v&AYX45 ziBo{LRBi%df;R#2gD6ChJ1iL?mKZ7!S&{GpaO8fCs=Bf)Hx07LtPqV>Uw`}B^UnjP zum1QWkizOq-@bQX^>;t`?A^DneEO5sU;SwHlkcPM>JQ#td+|5G?X{PlUwi$fwI9B> z_U(5xS@p4r!8QX!qART168H&BPk+hR9%?i>G+2t@?VqvYc_y16bPRRd2_az%VBcig z&6^^)Y%~qGfCmEuLjMP%q?qxR6rMgcqtOH-E$QR=+6h}j;w(jxNL>J>hfo0VY zq&BTb*wDer&cWFNCs)`GPtWw&q+tJ88${*$>NX+z2@Jl63nRKJtGPE?K#PB4i|6w~mpDF* zkN*-9$n>JWlV4-9ymtCg+x7H6uk6Bl)?Rym?Unbge)7Gmul;ECoe!_Q@bZ;U z-&p(ecf&SM>v}_6{}Twv@u63?1&yFoZRWpv=+eN!fv?_oX|Uahzb>ju3oEq}9jS0| zKZ%K9`J<9P%`gk>u9X5kgKC47bK3APp;jy)LEfYQXLsa2$@!JQGc|b2H zMpOatfY>)+S6J#rBdu^wKH@B(q~M@fC+yovN6JmqD=RV$hLK@YOmosZFDYyX%nUme z94-UiPL(IOLQxZ)itz5$H{V~q{PIMi;I^TiDAkXT-#~)lP`ZHFMOg9%J1`Z>XqZc> z9X#>+2rHgW(>ex%0kgP7!5M=|7B&ggVJ(awm|8%WdBLElV^%qc$)R5;Gts>HSP5E< zOTPz>egFrg2aJ>R;ep%zd+`aaLYQMc{d7>GI;eP9Z zmIOv}PYXhrEgU#fZInw@|Iq`RXK8l9%d=c9UEFVahDswc0;rDe)mb>w5r`rhIQJ;N z0R0{2a!70;l5z=GO0sBk3sfli7wct*OY%8>kCichs z=9XpjL);~~oJwu)=oD>m2b_>iUQxwJZ&sdQJu!(GFIfK{F+M_h!FrHig7TLYk;5?* zAc%t+i^w5r9|}M%x=>Ouq<0X>qBe1%5C_kWs53!3t5M=y(EZGGCLkaXs)*V^8>TI~ zweDyc2mg&}i!RMOTiRgHn>KSZ9(1>~!Gt$$2n@k`g5H+4zPJr`J=^+Q+P1}Q+f3W` zmNqyN&74Lh2zIu#AzZ+;K{eo&Od!K?_!Bl^B8(_EP$SVI5FIiz_>~F#Fj~4e(4by% za6!!*Jxm@2G1?(+3HUzDMXQ+nSv*OfW^xk}yB*X+$`uEe9%lXhQXf&fuAl^@K5xE6 z@f0pE2>uFcCy3yjRav*df8M- zz%Ejj$@LnpOhVj%*Ba2Qw&9WD0Kv6=r5vo75K_B{D<2j>(YRS@A8C}Qn8~?~vZ=~H z38!~MDhrHarGWq{8?~NNUo2GZAQw4{$c5vOHse{;gtwiGAz` zMJ;^6U^kLFk{X$J87qxwq}k!sOSqrhPe$C#G2QQ0G_+OW4O%%)^-aurH5jCb%33^;ArTZY-# z{33G|*oW5gX7JCV?IrFmhm3-{T(tIB&F)QmEX(1b1HaMRY>jLMYXn7-xR}HCkaMXr z@|r2^kN_ztd~kW&MR=~s3LUy~k5Q9(my940j2h{YJ;2jVmFl(H?{1#$m_86!0e;9)3<>sVrp zBp?Y`16$eGKV{#@SxzCW4%7}E+$}e+#S$T=Ed`c zub4Mw!osw;d&l5aw>#r7I0;$-=dntmHH+^IL&fx;Vlu<|Zb2^09jTUTvu^3ppOU^% zqncync$+WL)-_9ToEGOYBB_>FOnl6Gmw3)W3qdbzhu*;F+C{mAab{P704pt+68-(q zd;d8);7isgOJnfa)=zq!YbA4|iwp|Iga61Cm&w2Q!*6~B+=q}MR>lyA`W_WQrs!7} zi;K;mPLu@?z~kG@9T`n{yFH5g($AvAKoQS}A2Qk=zBX$2;m%E4jUzeUSl=kvU8?!O zKWL-zEZ1KrfL3xYF#Kq6>b&ymvM*Lr?raXkj=8rT-}sEa5n}4%5n?t$%QDwXXv49%RLmRJrGZ&#qQYMx|wCxfR= z$VYZ)cxLR$QT-;Tmgq`xs7bV3kAjtl)yVtHKIk?KlIu_Pr&`RV76M8nMXcAP@l;sekQ47CcO`W}8onbf8Vs=x>i8Y)^E(-I5uZ5eA zf4CIkq(jIU!IeA;SdO>mj&K^`o-d} z$)WMcl*F43CYsy8mpd|%ZGVZ}Rj!=iVHj3(JJ-vJH@Kz})FvLWuPl2MnM4UPO9kcv zuW7eH6^2>`gyK6~z;lFOKvP45I9bup{8`ZN@lNH+otSI&y>B4+VeR$5UVZc1t1o`A z`r><6fBn(bkAAlL(l0-I|NXU}e2UNsI1S{DkLFHZ`ryW}V!Zz4YGrx0QPS?jwf~DB z+{Tl);vzAw57XF{iTUrJ9vvSAs{(@?9v_=JIyrP|M1w{V9~3l72!D9fza>mX8%k}bO(gD>&7C&jLITt?c$6#VIJ{xTCX~g(TQTf=B>Cm>Z(d zpIi5#80!wGWehOvFAD1*kx=t9VLB8sh)0Nm4Sqa3Aydq>?_953%4dYfxkz@Ut@I}~dWx|V@4S*nO9O}#kHjvTwgcen;8z9KcQ7fku@E&f=Dm}(luLGhRNMM5EX;dm zyP}q<_1FDOe24^PCIe#?QM~^>(U|1lTx0M z%gsT&)@g~|j25$l)5HUke~e-79(tqMjj19}rT@?Fi|UWzIzj$n23(N4(V!X4A=+`+ zF;-h{=wOtW{9&8x&92Pb1rs3Pco)ic{`kz79K7~)`15uV&M>@0BG* zu*WIR_XLwkCa0MEn#p@iE+C2jcZLzr`N^3Rqo?>k0PwQf`kQIf`f>Ir(r$&#@C_L1 zeU!q*w~-WKZ{rubY->=8E~f8K>a{(`lSgpt{o>QDba Dy4f1b literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/BTBrowserDialog.cpython-35.pyc b/bcloud/__pycache__/BTBrowserDialog.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fff9a1b0d93adac05f3f38c674f5447a1212e80a GIT binary patch literal 4805 zcmaJ_>vJ2`6+f%DWXYE8*u*?iQyM@JYTG1df3<>koWah~1QFMkiOqcSq@9@lF;Vt@>n6wS-KvFFg zE!~IT3?4Sce+F9!h)xqVG+K$%3Q&tt5T{0h8c9W@RGX$oMiJR=H%D^`I-MX5b5@A- z9$HB#B2OzxMHIMg^lneU@oCKJu8^X}^*jLZ_?uBy^B!+dOJ!&!lu(cY)g2Q1 zDEJlyqZHgojc+r74MVejlQQEw3_UM&6BM!W`hL~jPmP-?xFy_Dh8njuPthp-WJa29iyH1UR;0Y?e$+??9RLV>z6R&z-Z^=KZ6_U0`Kyr^Q`NW zi=8iDDsQRkstkX(bY1@a3!6Xx@=8r>mo7AoIz0Bi&gai}{_t1Usl*_;{`!S&opuIZ zWB*fw^XIU!<=nL8AfAklJI-bj44DoPGaSo&P(X%eWU}d*mLmqxsiurtU_WQctmQa% z%eR*;S=b_V-wI@+Vl*w82&^U0(-5eX?vY8q-Lizt=(_FNfv(HcqV1aAqKNZ?J)xIB z=oochCXXJQ96uuS(=*2=9@QttD-%=bJ!bhW&-JaDQ!NW|F63rHnPZR27@oM%YRTL- z_%iDo&sloQ2I|5KmvpO(=BYw0`%F9gnEln&Y+2vFK-4IxM$Ni5p=52p<1IG?cnd>(ho~Sq*=&L9M72w0vx@ zHlXFTLGbh1aD1P(7yP2)Ff|0(eUM|$KCKwbY0G1t@ARhl|zyRZXRT<=Qg;0C&E|FW*z+8-m zIZ2`>nnry9=0b|ZI1}iOtj5TFk86c!z*7Tp8Uai^$YR_}(g?87A-xop0<7jQ-?SRz zhD@h2JBpsDMnHKIS@I1=ZcPhNj;Zn#>u;IA)Z$`l^5i_N;@r|)T%lMPfzH(g1tdEO3J8)c(DQ(Q^>N>Fqd0Nsw*Yhv;UzJj9RHs zS-x%eEktAt41d8#;I3InKIVO+`~3rW%GDmEJQu;icIUimJ}OyNPiE(A#|p`WKW`kA zIZFsnAp9V#WJ9{?*Hv0u9(mkdaJ@x$RPjf>TCFX@br473(JB*0D%sadeS&X>Oe*RL$Z#NBud(NKyM<1!^DxA$6(^asP8AM5+Q;LkD z=hTxk;t)?xg(0+*mI>am(3K4e9AsQzBu+9Xw?ls_jBX`O9L110!3|gMvi~YrkAUsp zi-r&uvRbc}KxjZ90ksD$bFSAC2r|9ewHV{jF$n%3M&eo;&+_+oAKlKFTt4J@HN)}m zFJHB?OoittGZ1iQk@8ACDoi8vbLvxQ2=+snGyGF-O=mfgVaBkElsaO+IHiYb6gDd2 zr)r+JV54FPyamhk!>HfCbB52trC5lL3xx`zE?kV1U|fEP$1kFx*wE+zg6Cc>7aKx= zUB3SR?RhJ3a&F^i0*_xoQ%8xa(bB!_)o?t75%|{R$y?~D7$FwG>)#U>VeQki8((~ZLU8@u znYBxQ?qsyGGqx^3p zlSSmJfFn@bKlTQjB zsn|qCzFGxzL@zh|x-Z!8O2e{Hx68t6dA^N6e@Yd)>ir=s98+PfB={9Z1>GoKgzPe^ z02Q)T&+j|QIh02-O;7MFsZUf|yxB;c)xzTs<%GIe`@A*DiU=1>UL a{d_h2y=b`LD#nV4kctAmPfKa3*#7{1PXVj| literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/CategoryPage.cpython-35.pyc b/bcloud/__pycache__/CategoryPage.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a993783538ca550b85b6873ce3769c75d0f8af3d GIT binary patch literal 7730 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 WlgM%9a?O;u7MsY-|9Y-C`2GhTt{qwc literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/CloudPage.cpython-35.pyc b/bcloud/__pycache__/CloudPage.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..49f0504b84dc1168ba6253ed4c4376c8afd624dd GIT binary patch literal 14709 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 RU!;7gx8^sr3u`hI{9msP)_ni~ literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/Config.cpython-35.pyc b/bcloud/__pycache__/Config.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..93c2340301e6cfb882bd5b9139da4eb4ddefa4d7 GIT binary patch literal 3891 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 v!R?iL)Rvkk$a_XA9B7(FcOL=I0pX*oI~rE literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/DownloadPage.cpython-35.pyc b/bcloud/__pycache__/DownloadPage.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3baf3a47e2848d210b6d9d8cb0b47b12f8e28789 GIT binary patch literal 27575 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 literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/FolderBrowserDialog.cpython-35.pyc b/bcloud/__pycache__/FolderBrowserDialog.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..628a30434d6a0a8a1deb001a245bd590d5e1718d GIT binary patch literal 4435 zcmZ`+-ESOM6+bhxJNx0Wy^b3UG-^awlv+otvyJ#@%FMbQu~H@yS!OHE6at}n!^cstjN4ZPf$EM1G&0hQN# zMV#;Cy4a`97qq%_zpp2s02L! zm}m`44n-yU5tg6?JTCJK4L~$V!7zY<9DbE~k32n($zh5{G+d_$Qa3a_#FUqtV`|(m z`-aRm^8wHEJGJHTfw)j)Q&X)0rydxsqB+cUViWCJv`Z8Kur**&0hWo{4(;NBDoa$9 zsqIp`qJgUJYt*i5U}!M(XstvKVQ7$RgImZ8LU05gkFfAigdU6@Z5d28_{cqT5=;lU zOuKNHQ?v_3L5+CInmY3`PVMKYIL#Ua0X%yyE{0fgw=S$L&^*5tuwA@CD6db-*KR1+(BWoA`*cRJ@>{7pZuWNwJpCY01yCWtpLK zpu!pnF6iL}YQMyEdFG3>Tc!5J{yeLRiC$udfGc3zUQN?_Su~YHGM~Yx4*Geh^=DB!!3AKY<0sl5>fLt<#t0U(n2|5 zx2wu|uPdag20@(0MGz==GftyyQ#v?94VmjcpM>kVD&Jh1y|&v=aNWxX9#R^naqlq+v z2D3C3twJ@Rs?J6f%b>4QHHI0f)p|HJvfPqcl8ET8R)wmqNFkPsObX@Xg;b^0EQ8() z%;tKw$_Q`AVpCOl@&QA`%z7>ooEn3@+7al4QKU}Ih$OiU-h>qLR=l;^TT_kWb1N{N z8W|9t$&y|tl^nKI?fS}%U|}x!>etjTNCjb0$au9^2vuFYc5^P6Sz1sdtj@!Q9Eja6 z4udY4jv8g5v&~@O6{?!w!!S$|Rfh6K(ezXa9Iwe!I8h?;kt!E)kw62h*_J=VHi3=; z9(YEf-~e{;hx^Lx552svOV|cl(7xJ&=&HsZ8)&dE`4Er1!qJP(48=(Fq79TCOh z^hTJjPe)-9PIqP2hDN7vZQtrctF0vKMbrJ)32}d_yDd*cfC;pG9vxXV{LfmW)`Zot zhOKeivps9VK7;XizsJ})Yn`!90ppbAS*P)CVAq5_j`xIJw|8DR>8!yuYVkehA5sdr zXftT}o9H;u;X$14#{&$IAa(U%k_7U^x(-l#NIniHoCui*XvhKBhG3+FM``ghYkEHZ z4^C>j@(M_+aw`#`RIV|$0Ar7 zAiqvRaT>=oGK#KfHXM@w=48r8 zL8xMckx;r!f&~!TfEHcLtZ)5fur~X>@6#UGK#r`@WPZuIKW6cu4&}VA8Lv@_Q$V)X zm$W^q%Mx7yO){=Wle@@bm4Tns3Bw$8AR8W_BXteyGk^+Z9HR1Rcke%5yRRyB!*yKvwAWE(I7ph!s}ehqD#tl|$ggo66`gLe?T@0&dVpZQ7AHcd zBJ4#}r-T3E*K8Q~tS>BGo1L500jkR3QR7r^U0Zq61TFT%AVmmo-HVe*zRpazQgkwq zW;c}I=1xZ=x0PiZF;ZTUZHP2i&f=Y$$^lX3fCI@ltvRH9Tn(9gr@h=nZGEtO3pjpb zEta?v`aq50SMP;+kRtl}$RFz>fcSnnPS>&=38j^55upzjTb00Z=jofnOmfTlMv*mU zl@LP45JFrXPF%ce);WZqx^*6K31P>@dfjr+YPO4TQ^DV{Jcr@)*2$q}aFq{34QFh= zhWhGF1L(Vh4mI!KMxZc+)osdAaap*8D0TV1p)JE5mYYtGW5Sc4eZ2qk_YQvW?&F_+ z^y#l2J^A>L`~P@!<--1NfB5*r4<7&JH;+Gf*DPZ0Pk(;$&tL4n|Ka0b|LxQF|FHk} zUrG+Ji%mzqhPU#La-fLh+nB-%pCLzhS!d7_gU=l--$%mX3e?cF<PZhbCb#SrRaU8Dr69t5bndx=1; z>;=L7UYM8_8H2RE$Q_p(+7gCmZ7_Bx$qJXu%#kJFjI1-mC)gv1d*XC~CTKNu#X1T(2zROsy`6STH97$my*0ri$HTwA`N9>%XLFr_3@x&!m K!#-!Z_WuBq9U@Es literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/HomePage.cpython-35.pyc b/bcloud/__pycache__/HomePage.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87740b5c5e6fd7399cd1b317d4aa079f45879519 GIT binary patch literal 13814 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 literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/IconWindow.cpython-35.pyc b/bcloud/__pycache__/IconWindow.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c7c1fd56d5b5c2ac5d7afd836f1efdfe66ec830 GIT binary patch literal 26682 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 Ph;&bJD+1zVOVR?WCz+*1NYev-3Q&GvfzG zM>7Yl@Xdcli2kKbFAekE_S;c$l*``6(NtV~q}*yX>`K|U zU8iuwG4sNCT3F>q(=zSyVmvRJM-JtbAU$i&AF$s&)UINo&DyT~@#k+p11ox>>NZSE z1j)8D@3=>u3fmsMhG5^q69Ci!5F;=ujLF74)`tu)fdYulIC~5z7H|Mil9nKxVq}2D zTYxbDrel%?q|qR|&u&@=gnPt>H|=L}-r5&Gc5i*!J9WCddVa3rI&aw4(e903dS_SH zF5T*V_51A$@2y{Xf9>4T+Mid~&Rh=9uU6E)8K>e z$R|3ck+YM0h3YD!JPu?E?ZDHHMqZwLjU_NI<`gB#F_GWw8`^HrOJ^$m2((CP2qF zC4u)AQUP$xlkY(otL41ljDH1C@ z)<@aOF^J(Ky}+?A@}ht4eVZJW`;li+F^TlN|D-A$fQRrKbw=ZK+tD{0S%O9>muP&zxGWVPYhixxzY zzP;~0!UYU3{Sf|o3Ws0$pm*^C+m{I+UifiS5rEvT$>*LAf4v^L@xl7`gCcA&0TmSou@chLHOH@%o&-(T6 zVd(Rd>wkX@nui=lx%Je(xqZ{Qp{+a0|l1XYbyZ_e{O2ryFkBj8yK2N-iTaT1>D%+b{%a zc>;$`Jiu#h-dYGo60+zJ&u7g6G~PYQyx^u zl%2{1W(llEm5iEIwqw3SSscHsRDzFTm5f85DVxIAo5QfRAjnFHTIs8t>|6();xrm$ zJrW98FVkP_;mj;Suw)VvN-5^zGCtxy*cHr76rIQKiB8ROEMZq9g$9!VO)ga%6h^#7 z%&@=~MuO2nkfr)GbUi+mz{i9VlbpoV#fP`@uyNwB5#Gf}6(-OkP$Ib$p@68A^`79~ zffI4 z9nUX26)U1HHG{su7cxjQV0mBUH4Wl(&2r5OCLHUiQ59};1DT#;1x`~v#(CQ3R!^aA zqp?<9@fc8wofrbmZq~L^JHjVP*=B7&guHPKge$fK#Ab29b}FFup?j$9s}yr1+`-vZ z!w52l(R9r=nwt@14db15xzXQA8iwgs3`2027o$AL&90UKo z*fel26iE!6ax(gGPEDxUcs4WkST-Z~keg%J4pL>)jQa3s&CUy}<$AX7iUq;7Msh7_ l6?tB6++Q}o=}758)Rte2V7 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 Ia@E}503TIjApigX literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/PropertiesDialog.cpython-35.pyc b/bcloud/__pycache__/PropertiesDialog.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c60073b6d71c82b3c4dcc733f328acb20812ad06 GIT binary patch literal 4072 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 literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/RequestCookie.cpython-35.pyc b/bcloud/__pycache__/RequestCookie.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e51491b1a8c4d93e51bb5feff71c9521c2fb80c GIT binary patch literal 1776 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 HnZ5r7Eq%50 literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/Shutdown.cpython-35.pyc b/bcloud/__pycache__/Shutdown.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a2266e72ce77753aa962a0ca1284b9cb7187a42c GIT binary patch literal 2825 zcmZ`*&2HO95FUyYWifJW$EagBKi&K^sZv)$TA%@%AP8c+Nf1~GDjQCS1`I8(BuW&i z>{78MIOxH>6zIJ`-=NRYLoa;-UW*?53ca*5OHpBhl=2Qg?tD8tv$H$vmHByVm;b%@ z^+y1ILGCdS-@_*FqVVufg8;yuVGV2zydr#G02}{wc;M;a8So=A4B!SF>tGjYShH%L zpbco8Xee6*vu6##J#4a#DvsvSB+3E}Lz5l?oot~+oXRu7D}gts+$n=+fp-ep06z9t za?E+fJe^}=&y2Z{V=gM@l470#4{a_J)4Qo`uH=|!6>~Lbb4@Y7RLpZZ=6S`ukYi%c zZ1#&e<|m5D6!Vgr{c?_ZMKLjIjQy%&eyW()6!ZF9re6XZSKu@7s}jKaBkWf60a->hV@w zQ%=~$5zUh5`y-i@Bp0v!7N0D)qCu_YhEeFZ+@Pi$Nvvp}#yxf8?&N$O8TA>Xt{C+u zm(q{I#2oOr8+l0?r{tpTqQ!F`uvp9ZWmj}Y16(g@7dsUDWHl00|;EO*zGQ}0mfDP{V4qS9y^58WW1T=-vm8u;6yEICFKM@=r%bU9|uOtwNTs&(|xTgSG6P1aBx0rUWlfhs3r zM^jSao+^L+vg*O|2Y6hyM%75>oT1=D*B6P2C^{S`MF)4AOe(l}9XUPDRV^_j58A(h zSj36`xl7#yK54>9OOC$#Vk* zXsh~UX~xO)vrtP&IfG4w`X_?%d5AGujiP;{DO^yv0DEBtG)==|-h3Wv@a*tcwJ!(P7NtNL>SKaS{3j5HH|JgEt0*CL9$A92w9bs;{%amG4@(c5?p|4AkJ?O*S}iOk?NPw|m>u{*plTHrO~K=l2${>UE(Pv> zz|-L>wW=s$;gMJ#vx1UVIU3mzlnGHJVUnOl7jq=aD5`}hb=yg zu}&&uBe|7*S4(06J+UpB)=?Z}m(#0-prx!}q(hm8LcS+O6}sBCsaT?jPNDb#o4kqw z3|*^ei<+*LwH1_$TDf3q^V8oMZ5g%s-8nrmv)xGtk;$zpMXV3X>Zfm?o8LmE|-|n0*<$0=EHOozo*&!_z7%Xgn!I5>MkeY>9dNtZHge z-U~39%f|hJ97*|vLRqu&ab%3f$-nrBOJqz}FJU20JG7muMF$pdSnfE9O2#MyFS;x?qH;isXdKiH?1zu}LgqP%%x+ ziaGn03$ri7)XL`U3mIi=_GP~FrN6@@-CHX-Zo#OSl~qCWRtti%sIIoEDJ~LTCPC4N hYbX*k-LQ(Db6rJ3{wH&H(xtgetF4y2QmE(^{XaIk%tQbH literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/SigninDialog.cpython-35.pyc b/bcloud/__pycache__/SigninDialog.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..360a64b207524bfbb3af8fdbdff22a6ce47bba17 GIT binary patch literal 16766 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 literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/TrashPage.cpython-35.pyc b/bcloud/__pycache__/TrashPage.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8c6f0bb658c22437006559057fac448f7c1419d GIT binary patch literal 8313 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 KzwMzlq5lU4sGrFI literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/Uploader.cpython-35.pyc b/bcloud/__pycache__/Uploader.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..149b8ec516a72c84262a04c5d2ee9d0068b15cca GIT binary patch literal 4817 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 literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/VCodeDialog.cpython-35.pyc b/bcloud/__pycache__/VCodeDialog.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d3a3c6ef58166680e10e3e61fe5058fe0a8b9002 GIT binary patch literal 2236 zcmZuzUvC>l5T8BY*=OgRxcS?(v{Xo-TB42+LIM;@tMrdhOH!KBBEKA)yR~zd^WAlK z-85GELMq?|@j3V=e1?5RJoGE@#LS-ExKgj)f3vf*znS^%r0eZ=>qqhLv!5FP|G?bm z;`|mi^$T_}{upEc{c7$&#$evqzx zy$@;APFl0&0t{R@!*KqNCW3P*TCt)w;YFlpm;q8*B+Rslci=i)qCV{qf>$n_;*}R> z8hRPh70|1YuE8n#>cJ-ZNZ8gP-JlZ*Mx$X3T*MSGMu<0QgDhXN)-K!aOOz`5H7!=s z`(UPb#cEuE^eV)yS(q`I0fm`h6R66}m3Ph1#)o8vxV7JH?@kt<3YiR&i0h=td%ffq zhWE|i80a@G>`W~g4T%rMQ6h{V@hm&w(a}ALT3~!0>Es31BEpsZNbF$Sz@}EPqflYK z7^F5q7{>iB+wHo>mqL|Au7o6g6Fi^+pUp^6TWrC z^Wj#^HQy>_k%~xfJvwR2=2gNl$rBxh zz3r?(SJh3NOb=W$o*I`z8h@r_SZM0UNgfx+l?w|MYwu-zsEqgh-ksYIO|buDZ|6a{ zb9;B^?nAjmp4O{{@vE)92eL!rRV8#7ivb^JI-JGEbmpZhnTSeqP{>%w@HmO}p{en* zG@T(HkBVH2T!&l=ZWidMDtVOTLrE{mw75FSqmYs)>m+E5Wmc3TH}$AWaQjejGF*&x zIo75%E-}m^Bo27rjW`wnONtg+JqnfPQXB7XuH}jG@Ln7m2qDLe7+)P0$06R-_2ja3 zyF^r|^ARoFBp(!}c2K;;^ftpV%D7Tt*kx8%uA+`43K4_Ub?ks$WKFij)}0mBVQtoQ z0@lX)8f&3+(^+BxTfuR%`o4TdL`(W;q_%@iwXr+3^u$7fPr?$@kvC9mdRU99XBSLk|_p99Fl~1?>S=H$vTj6pMoco2V1pV)Y8^U(=QyELRTvxiKqGEwY#{ z*c$c>&HeEBC$bPgig)AD=_OrncXD;!gY)cveeGlQDK_Je@xkVNBqp2H6T5-*&$EKZ zH>zl)<3cqa!CO(fsOH~3~8g{MFSu7AjyPrEiJuc znP^)c zT;$d|wq>@#ChPAHLAOp%pIi?^(+a~;5sx#P2VwYp%(H68vQ~b9hV4D)cO#EJC#j`2 z{)YfAU{mx8184biP?IF<2J$N$OnaF0q$mrO=t7=U)ump=+lEeFM6KzYuEah3b7>=9 jJ?wf_imcId40HVTw=4WN34vO~E^sBof3^PsKa&k- literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/Widgets.cpython-35.pyc b/bcloud/__pycache__/Widgets.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56388e3c329dffa124319a929aefd9191e0c2dff GIT binary patch literal 1528 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 S)W>b@b97mp@ZGkh&-ot&ciM*l literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/decoder.cpython-35.pyc b/bcloud/__pycache__/decoder.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f6314ab07fe700a53135c31ea2ca226ba8daba87 GIT binary patch literal 1778 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 MtWAVE+7hAv13@?+WdHyG literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/hasher.cpython-35.pyc b/bcloud/__pycache__/hasher.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..59e53c948381dfcb060f5d613c27f903c27b56b8 GIT binary patch literal 2310 zcmd5-%We}f6g{3-(meV|X{iJPgs3105m8z|2%$=BkdUeh#49Y&G#;8)o76Lv+A38S zuwcn=u;VBAiP<6+`2{xRTu*>5Xa&1YV&~fT`i{>z_RVa$TzDRRe|a$ve8Z8)qrJ=) ze`KfmRp_#k_kStUzhC>Tg+`r{Jug03}`!e z?_l4-&J7G4v^mci2Dliwh;L#wanbfh>dJc$4-OApRD;y(^`p(yGf}8h|Iy>;D^F5yuiIKn{f24WUf@r+7e`eu_4;Ab zOue_9PMvp6I-1*?ozE~6O!wn{Z6ngHu+|AT*K0aV!dl<-+EF8^t?sUltTm?E*0s@3 zGmM*&x!K=MU8XEENnBwE6{rd2vIR=1SyfPGinBvO(2$+WL-j3#mc6eWkTMS?mG%u^(E_-F^RQix^>_C9uAVBm`e9l(4+l0%Z0 zAt&cVA}-*{F$@B`EQdi3@h7a(pA=-kWOtc|O0|olvD$h=skp3Ur4mqyDpRM)dBs2*#CcQodmRE=zsoU?xoMl!sE(t~GteX^ThTR-ne2E=Y ziISC6nXO_aoE}Lysis6kiT?ZPe@)LH{p?x)qaW|UReJ}ht9RrMERtg-nvp(othO#> z$DcZIFXAHi!l|=jgi~Ub`$ss<@RnuJ@{=)jjvh;nIWM8!h?ciDR;c(Z{>yY+XB!<` z!T;;nTEyZ%1&9NpSXfy6C(QMnV3z1(QC}gdr4vw#|Foc9y7Nz{(+oAEk3~ICRLduz z7XK+hef!@3Xf4slqP|L0PfkEB{!@Z_>DI!3Xf4slqP|8{FHS%${uVF^Gfk^nw1vf- zrETPYDJv=RpJi*FkuqT9Rv0-XMmRH);z&8Qg;i>5nt!m-)7#zXp%m{}DprXFwd4eD LsaUC$irMEUrc!U$ literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/log.cpython-35.pyc b/bcloud/__pycache__/log.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8fcf7d9b4ac61b98bbcfe6fea48709b1aa6f49db GIT binary patch literal 964 zcmY*X&2G~`5T3Oi|D;aS6odqofJ>$N5+AuBgs7-Ms!BzLN_~l3d+XZqPqe#1N#$~Z zm*G`-0<>4ep|8M+87C3o^^SMGo&DyU@je&~`XBhO^B*R_Px$AtaQzaeyg-xU%b)~^ zR%-)F29*Jk0c^czLS$~@EQl;fT}Tn>L2AQS4DA8O7of1=3xmiZ#?kk!o48I(F7A4`nFDG`P+#}BXt!}5;*{UfD5PXi7{rIfx8?>hp*1_i+8`FR z79lc+<){ODYlNNGPry<(O#2|Nfib2WD6j&9;@L&b;G^=O=u=IUr3Y$@_*3L$RAoz% z#;pw$=2OuW=0IyhF@V}aEr+M31cTKD;4hW(yPF0_;8g2J`U7r9iD(o8vmQhTo#37@IFskJGWco-v;c2HP` ze@%NCSI4;KLKvjeJ8DD~D}|)KRpTb67&X52i4g|@_To5r#eMV6Pwp#?3FL)0KB-fM|8H{E-c zNUQ|NksLdVmmrRjcuC{dPMjdIoEO(?+&@vEn3tlcNJ%e!=|hVE1^S)2q_)^?u5^cU zXU?42&iT$aQx^#M_MiIqfVY9@@3i8nME(`LMnWM{@vl&dD6*7SD58|hZ7cG2irCBL z4vIL+c_&4j<-Cg`?sDFq*@prR%vp7Nk^ON9snJ!LS;Z%hh^P8)yd2H_4thk-C{? zuxOh}Z6tLIcN9V9DN?t}{1#T&8wxJ+9)v@RaK^J4!$iiF$_@=_`l1~bi_as;`}z${ zZ;lOV88hPU(T-}mrbk>I@wk>V^HtVwb1Ie@8ih>0DnHyD&ol+|!#hWIwYBV6lF%~o zteVISm&6uV&~sGYVc3YYrj7(6uL zq27U!ZgQ9bI_4w&0V#@NR#LKx%xX%mV=?rjyaAaf*BnOefNIC?I7VwR%fi_Y7pION z>h3#mC>&gv{bTXFwwV0~uMmSU>s<5K5(Uci2l?g{Yn;RF7W7@bOT%&p_ zl^7JxTue7K;lZbsbL!YRO*n>4Gbdc}R07*9D);yGb$4bn87*!mvKisZXl5!K7j9h} z8PyC^R19gRt{FKPjV9cOdb@NztLt_QS2#7!3$Lli;@V&=eoXj|X7zN;jA~=?kXP8z zweDg`XfySMW{Aqth@)vuAJSA|$B>1~fDxo)LP_vMGMR{jJN%0Dt!VqhFI&@^nuxU? z!{}Spm>Fx$>DeTP+uA+eUCIr{Q`u3qwe*82v|u^B=sug{Sv?Is##2bh=2vQ!8vNBN zc4dQ7r}!0*5>PhU>`J3eXSq0wl^+{2ui!PFMWVs8Bs4{AY#gu*_BA_ca7Kqr0Yq{) zMfKjSKA2EdEwewCQB#^8=VjoBe*t`!X*-aCMfQf2u$*hiB^-v9Ix6f~ePKJAo`Qu15Z4xweWY#5z+qR~t&twp247mcQ~ z>S&7d{%CY$G?ubzbe?%+bw6#ZzIU{>tr!+>nI7b18dP&q+M= z$>ql;!1e*S4oKK0A?jtQ1TG?OvU-T2B*0pciB{4CVx^0Y*+~C0nN=K8S)h`IErHCl zQpPQ1{zK-vWf{)bP{lML*wW=?)J z0|@86A@As)u%yLzKPo(!n!AJluh~Tw9(`6kbG<28xO;oy(fPuq&w4B*Z1MSmcuD{k zEPgU;wNVpsvn9BA|C5EA*NSJ)&3%7q?%q3Gb??&R)w}bTZZ-vrv*!z6ye)%k2M5=t zU@5rHfBP;vy7isZJa^~x;^nD@FODysJYBeUy71oTg%j7ItJLwrqfary!pVolk8c&u ze!VdLaQ^&_xqD~im}RhN3PMHU?CjkA>sHm=o%a_WJ}g}OvUuU--2K}vvKx$~_}S&+ zWpr@0@ac`>`Pt$J$2m|J&b&YW;H&wIGYhj<|JzRJbiQF(WQl} zA6UXo!TFing>z>Lmv0m=e^a=8YvJVAh4*gAeipv`1B9$T0cR}?-ND6^A1q$^eewMF z^H-+O6Be;}d20UtDdc$`Ru6@DP84q5Z3-?&w(u>z%^cjK?5*?|h-`Hpp#tA!u)!FE%jXt!|h>Locy)lWH!@{8;o#{?ILKEcyqehc z<}xo54qi~Q#GCgVyht>d8P>7*E9bO&pog^Mb!K^x7viyBreW1vX zbtsOeIx`L{#; zm4_DzfKER0tRzz$uiXR=g<}#TCt`hxQGh9wj#dcpGEO(ZWD$egM_!=;CKn!N5$!lU znJAaUg5x<#ZPY&IRG33BLjZ^P7juH~Su%YkqQJ)}@B{Q+K@*@3I4xV$4zA*28UZ!z zLtIxS$K|I9zdVau3??8y%)K&VkPNKnUOpjsgAR#iU$O{B$1nZW*0yDBMG1#6;g3`jvAK=OI zl7s6Mgl0rCy7_$16&`1&=1X!weDBol+rIjt$IVAu*9$CrKfNBfDy&NxnGM8W=F$ntmlpBGxDU` z+$?_rzJFrbDgX1bd+bTz%E3tR>HVc3TX{2^`OYApN_TDhZQJCw{7XMwc4v^SuhjNA zw0(NXg<4lA$JjDzOdsC`{UN7t#d2U&Doj}3Y6zF*e!`K=CU8^2bV}7im3kLOuJ1(> z@w|GdKfI@-=Z%Q3H@cMfcF8;!J34y~?u|HKJ=hU`O(-eJo`mzwSZWkEHRUl1cga62 z*VxDESDU~7D$1_oE!n(F@!`)U|7sB+{7SV96LmcmyG74y5S)$cLV?;E&x>RPX_z#k#iA`?$oGHRLf| z_z_FNXIo_CmE<|X=WQ-3U1Leq5-#h4NayJapY_p#TTtsd%iYt}*K?q&H{$L)@Osyw z{yq`t?u_>LcJ)L%_H~8(L`8Q;INH;-x2vbCM^tolc6N35MStCUC~UEfr=e96h)4}z zs!3La3#vF)0XJsbxVD88=CU$&>x?~eGvsVnERWpnAZmrD-MW|A%>>-w`xHNRch#S* iTB){Sm+fA~Yx9<@z;CbF(CDr4*Z*w8rm8LeP5%YFTj^*3 literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/pcs.cpython-35.pyc b/bcloud/__pycache__/pcs.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50089629bb55015e9318dcf144feea89c575734b GIT binary patch literal 35954 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ⅇ=vxk4cq#xv-fExyghE+B$o1?9>UBr7AJ4^hRQ9NPt`E zjpS?4CO;m654i2yhmb8u(t=>JxG&sNyB<|YApX|m=dJiPSzgLIeP3A`{tn2`{R?#V z^hhuCHh=7so~+$amh}EPNzY4WmZqI!Omfj)Yn>v$vQ!pE9nMnE#s zkPRCOx@y@D!M$N9AXQuq1=zKLp%AQEb}OExAZvz(sSHvqf9T2l;SU$t@45>~74|+i zzH_&gmoGixEs-=0y=j*On@k7OA_3K%rT9WvE=^LCB8UQAISn-#o^&GU*OZunRgS?s zJws}sb?Pm}#R+nu$mqYonFLp~kKLK8?ZIS~zMdXUMLU5rvci0K)!?H;gZjbJ8Qfgb zmqKPJaZtCCl}I?bn$4m{T-?ttyDqUK2KbSiBHMfWhx_`#v&soq? zcWH;X6#Fh2&}H9;a9^3x)rw=ey4$h%HX@yO5Wh)1jG{)?_KD&%t26lv|5s5{8J!Vr ziq2`is`>Y#%cECB=SHt?zA}1Sv_9GpUD(nx_sZzJ=w;ECXj99T(fK$#KYDp|e)H8R fTbdU|zY&%5&DS)~Z~4~Tr8vK!c`oYDi_ZOj;%$=h literal 0 HcmV?d00001 diff --git a/bcloud/__pycache__/util.cpython-35.pyc b/bcloud/__pycache__/util.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cc7970ce115defb3eae6ef1badf662183d31ed50 GIT binary patch literal 7416 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 F{U2^jaOD61 literal 0 HcmV?d00001 diff --git a/bcloud/gutil.py b/bcloud/gutil.py index 5aa370e..60607cd 100644 --- a/bcloud/gutil.py +++ b/bcloud/gutil.py @@ -63,7 +63,7 @@ # 同时进行的下载任务数, 1~5 'concurr-download': 2, # 下载单个任务的线程数 1~10 - 'download-segments': 3, + 'download-segments': 8, # 隔5分钟后尝试重新下载 'retries-each': 5, # 60 秒后下载超时 @@ -74,7 +74,7 @@ 'confirm-download-deletion': True, # 同时进行的上传任务数, 1~5 - 'concurr-upload': 2, + 'concurr-upload': 3, # 上传隐藏文件. 'upload-hidden-files': True, # 上传时如果服务器端已存在同名文件时的操作方式 diff --git a/bcloud/log.py b/bcloud/log.py index addb30b..fdbcb76 100644 --- a/bcloud/log.py +++ b/bcloud/log.py @@ -1,4 +1,3 @@ - # Copyright (C) 2014-2015 LiuLang # Use of this source code is governed by GPLv3 license that can be found # in http://www.gnu.org/licenses/gpl-3.0.html @@ -8,7 +7,8 @@ import os import sys -def _init_logger(log_level, maxBytes=5*1024*1024, backupCount=5): + +def _init_logger(log_level, maxBytes=5 * 1024 * 1024, backupCount=5): log_file = os.path.expanduser('~/.config/bcloud/bcloud.log') dir_name = os.path.dirname(log_file) if not os.path.exists(dir_name): @@ -22,7 +22,12 @@ def _init_logger(log_level, maxBytes=5*1024*1024, backupCount=5): formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') file_handler.setFormatter(formatter) looger.addHandler(file_handler) + if log_level == logging.DEBUG: + console_handler = logging.StreamHandler() + console_handler.setFormatter(formatter) + looger.addHandler(console_handler) looger.setLevel(log_level) return looger -logger = _init_logger(logging.INFO) + +logger = _init_logger(logging.DEBUG) diff --git a/bcloud/pcs.py b/bcloud/pcs.py index 032ca50..9b41286 100644 --- a/bcloud/pcs.py +++ b/bcloud/pcs.py @@ -46,7 +46,7 @@ def get_user_uk(cookie, tokens): req = net.urlopen(url, headers={'Cookie': cookie.header_output()}) if req: content = req.data.decode() - match = re.findall('/share/home\?uk=(\d+)" target=', content) + match = re.findall(',\"uk\":(\d+),', content) if len(match) == 1: return match[0] else: From 2dccc6cc73bf98feaea27088e8fba6501fd2b704 Mon Sep 17 00:00:00 2001 From: kang Date: Fri, 25 Nov 2016 11:30:54 +0800 Subject: [PATCH 07/32] =?UTF-8?q?=E5=A4=B4=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bcloud/__pycache__/App.cpython-35.pyc | Bin 18545 -> 0 bytes .../__pycache__/BTBrowserDialog.cpython-35.pyc | Bin 4805 -> 0 bytes bcloud/__pycache__/CategoryPage.cpython-35.pyc | Bin 7730 -> 0 bytes bcloud/__pycache__/CloudPage.cpython-35.pyc | Bin 14709 -> 0 bytes bcloud/__pycache__/Config.cpython-35.pyc | Bin 3891 -> 0 bytes bcloud/__pycache__/DownloadPage.cpython-35.pyc | Bin 27575 -> 0 bytes bcloud/__pycache__/Downloader.cpython-35.pyc | Bin 9007 -> 0 bytes bcloud/__pycache__/ErrorMsg.cpython-35.pyc | Bin 5942 -> 0 bytes bcloud/__pycache__/FileWatcher.cpython-35.pyc | Bin 5533 -> 0 bytes .../FolderBrowserDialog.cpython-35.pyc | Bin 4435 -> 0 bytes bcloud/__pycache__/HomePage.cpython-35.pyc | Bin 13814 -> 0 bytes bcloud/__pycache__/IconWindow.cpython-35.pyc | Bin 26682 -> 0 bytes bcloud/__pycache__/MimeProvider.cpython-35.pyc | Bin 2847 -> 0 bytes .../__pycache__/NewFolderDialog.cpython-35.pyc | Bin 3779 -> 0 bytes .../PreferencesDialog.cpython-35.pyc | Bin 12410 -> 0 bytes .../__pycache__/PropertiesDialog.cpython-35.pyc | Bin 4072 -> 0 bytes bcloud/__pycache__/RenameDialog.cpython-35.pyc | Bin 4024 -> 0 bytes bcloud/__pycache__/RequestCookie.cpython-35.pyc | Bin 1776 -> 0 bytes bcloud/__pycache__/SharePage.cpython-35.pyc | Bin 14089 -> 0 bytes bcloud/__pycache__/Shutdown.cpython-35.pyc | Bin 2825 -> 0 bytes bcloud/__pycache__/SigninDialog.cpython-35.pyc | Bin 16766 -> 0 bytes bcloud/__pycache__/TrashPage.cpython-35.pyc | Bin 8313 -> 0 bytes bcloud/__pycache__/UploadPage.cpython-35.pyc | Bin 24858 -> 0 bytes bcloud/__pycache__/Uploader.cpython-35.pyc | Bin 4817 -> 0 bytes bcloud/__pycache__/VCodeDialog.cpython-35.pyc | Bin 2236 -> 0 bytes bcloud/__pycache__/Widgets.cpython-35.pyc | Bin 1528 -> 0 bytes bcloud/__pycache__/__init__.cpython-35.pyc | Bin 166 -> 0 bytes bcloud/__pycache__/auth.cpython-35.pyc | Bin 8902 -> 0 bytes bcloud/__pycache__/const.cpython-35.pyc | Bin 3867 -> 0 bytes bcloud/__pycache__/decoder.cpython-35.pyc | Bin 1778 -> 0 bytes bcloud/__pycache__/encoder.cpython-35.pyc | Bin 3223 -> 0 bytes bcloud/__pycache__/gutil.cpython-35.pyc | Bin 10420 -> 0 bytes bcloud/__pycache__/hasher.cpython-35.pyc | Bin 2310 -> 0 bytes bcloud/__pycache__/log.cpython-35.pyc | Bin 964 -> 0 bytes bcloud/__pycache__/net.cpython-35.pyc | Bin 6032 -> 0 bytes bcloud/__pycache__/pcs.cpython-35.pyc | Bin 35954 -> 0 bytes bcloud/__pycache__/util.cpython-35.pyc | Bin 7416 -> 0 bytes setup.py | 6 +++--- 38 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 bcloud/__pycache__/App.cpython-35.pyc delete mode 100644 bcloud/__pycache__/BTBrowserDialog.cpython-35.pyc delete mode 100644 bcloud/__pycache__/CategoryPage.cpython-35.pyc delete mode 100644 bcloud/__pycache__/CloudPage.cpython-35.pyc delete mode 100644 bcloud/__pycache__/Config.cpython-35.pyc delete mode 100644 bcloud/__pycache__/DownloadPage.cpython-35.pyc delete mode 100644 bcloud/__pycache__/Downloader.cpython-35.pyc delete mode 100644 bcloud/__pycache__/ErrorMsg.cpython-35.pyc delete mode 100644 bcloud/__pycache__/FileWatcher.cpython-35.pyc delete mode 100644 bcloud/__pycache__/FolderBrowserDialog.cpython-35.pyc delete mode 100644 bcloud/__pycache__/HomePage.cpython-35.pyc delete mode 100644 bcloud/__pycache__/IconWindow.cpython-35.pyc delete mode 100644 bcloud/__pycache__/MimeProvider.cpython-35.pyc delete mode 100644 bcloud/__pycache__/NewFolderDialog.cpython-35.pyc delete mode 100644 bcloud/__pycache__/PreferencesDialog.cpython-35.pyc delete mode 100644 bcloud/__pycache__/PropertiesDialog.cpython-35.pyc delete mode 100644 bcloud/__pycache__/RenameDialog.cpython-35.pyc delete mode 100644 bcloud/__pycache__/RequestCookie.cpython-35.pyc delete mode 100644 bcloud/__pycache__/SharePage.cpython-35.pyc delete mode 100644 bcloud/__pycache__/Shutdown.cpython-35.pyc delete mode 100644 bcloud/__pycache__/SigninDialog.cpython-35.pyc delete mode 100644 bcloud/__pycache__/TrashPage.cpython-35.pyc delete mode 100644 bcloud/__pycache__/UploadPage.cpython-35.pyc delete mode 100644 bcloud/__pycache__/Uploader.cpython-35.pyc delete mode 100644 bcloud/__pycache__/VCodeDialog.cpython-35.pyc delete mode 100644 bcloud/__pycache__/Widgets.cpython-35.pyc delete mode 100644 bcloud/__pycache__/__init__.cpython-35.pyc delete mode 100644 bcloud/__pycache__/auth.cpython-35.pyc delete mode 100644 bcloud/__pycache__/const.cpython-35.pyc delete mode 100644 bcloud/__pycache__/decoder.cpython-35.pyc delete mode 100644 bcloud/__pycache__/encoder.cpython-35.pyc delete mode 100644 bcloud/__pycache__/gutil.cpython-35.pyc delete mode 100644 bcloud/__pycache__/hasher.cpython-35.pyc delete mode 100644 bcloud/__pycache__/log.cpython-35.pyc delete mode 100644 bcloud/__pycache__/net.cpython-35.pyc delete mode 100644 bcloud/__pycache__/pcs.cpython-35.pyc delete mode 100644 bcloud/__pycache__/util.cpython-35.pyc diff --git a/bcloud/__pycache__/App.cpython-35.pyc b/bcloud/__pycache__/App.cpython-35.pyc deleted file mode 100644 index 3b3c0f56627d7574f55d414bbc14a29fc51920a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18545 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 Dy4f1b diff --git a/bcloud/__pycache__/BTBrowserDialog.cpython-35.pyc b/bcloud/__pycache__/BTBrowserDialog.cpython-35.pyc deleted file mode 100644 index fff9a1b0d93adac05f3f38c674f5447a1212e80a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4805 zcmaJ_>vJ2`6+f%DWXYE8*u*?iQyM@JYTG1df3<>koWah~1QFMkiOqcSq@9@lF;Vt@>n6wS-KvFFg zE!~IT3?4Sce+F9!h)xqVG+K$%3Q&tt5T{0h8c9W@RGX$oMiJR=H%D^`I-MX5b5@A- z9$HB#B2OzxMHIMg^lneU@oCKJu8^X}^*jLZ_?uBy^B!+dOJ!&!lu(cY)g2Q1 zDEJlyqZHgojc+r74MVejlQQEw3_UM&6BM!W`hL~jPmP-?xFy_Dh8njuPthp-WJa29iyH1UR;0Y?e$+??9RLV>z6R&z-Z^=KZ6_U0`Kyr^Q`NW zi=8iDDsQRkstkX(bY1@a3!6Xx@=8r>mo7AoIz0Bi&gai}{_t1Usl*_;{`!S&opuIZ zWB*fw^XIU!<=nL8AfAklJI-bj44DoPGaSo&P(X%eWU}d*mLmqxsiurtU_WQctmQa% z%eR*;S=b_V-wI@+Vl*w82&^U0(-5eX?vY8q-Lizt=(_FNfv(HcqV1aAqKNZ?J)xIB z=oochCXXJQ96uuS(=*2=9@QttD-%=bJ!bhW&-JaDQ!NW|F63rHnPZR27@oM%YRTL- z_%iDo&sloQ2I|5KmvpO(=BYw0`%F9gnEln&Y+2vFK-4IxM$Ni5p=52p<1IG?cnd>(ho~Sq*=&L9M72w0vx@ zHlXFTLGbh1aD1P(7yP2)Ff|0(eUM|$KCKwbY0G1t@ARhl|zyRZXRT<=Qg;0C&E|FW*z+8-m zIZ2`>nnry9=0b|ZI1}iOtj5TFk86c!z*7Tp8Uai^$YR_}(g?87A-xop0<7jQ-?SRz zhD@h2JBpsDMnHKIS@I1=ZcPhNj;Zn#>u;IA)Z$`l^5i_N;@r|)T%lMPfzH(g1tdEO3J8)c(DQ(Q^>N>Fqd0Nsw*Yhv;UzJj9RHs zS-x%eEktAt41d8#;I3InKIVO+`~3rW%GDmEJQu;icIUimJ}OyNPiE(A#|p`WKW`kA zIZFsnAp9V#WJ9{?*Hv0u9(mkdaJ@x$RPjf>TCFX@br473(JB*0D%sadeS&X>Oe*RL$Z#NBud(NKyM<1!^DxA$6(^asP8AM5+Q;LkD z=hTxk;t)?xg(0+*mI>am(3K4e9AsQzBu+9Xw?ls_jBX`O9L110!3|gMvi~YrkAUsp zi-r&uvRbc}KxjZ90ksD$bFSAC2r|9ewHV{jF$n%3M&eo;&+_+oAKlKFTt4J@HN)}m zFJHB?OoittGZ1iQk@8ACDoi8vbLvxQ2=+snGyGF-O=mfgVaBkElsaO+IHiYb6gDd2 zr)r+JV54FPyamhk!>HfCbB52trC5lL3xx`zE?kV1U|fEP$1kFx*wE+zg6Cc>7aKx= zUB3SR?RhJ3a&F^i0*_xoQ%8xa(bB!_)o?t75%|{R$y?~D7$FwG>)#U>VeQki8((~ZLU8@u znYBxQ?qsyGGqx^3p zlSSmJfFn@bKlTQjB zsn|qCzFGxzL@zh|x-Z!8O2e{Hx68t6dA^N6e@Yd)>ir=s98+PfB={9Z1>GoKgzPe^ z02Q)T&+j|QIh02-O;7MFsZUf|yxB;c)xzTs<%GIe`@A*DiU=1>UL a{d_h2y=b`LD#nV4kctAmPfKa3*#7{1PXVj| diff --git a/bcloud/__pycache__/CategoryPage.cpython-35.pyc b/bcloud/__pycache__/CategoryPage.cpython-35.pyc deleted file mode 100644 index a993783538ca550b85b6873ce3769c75d0f8af3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7730 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 WlgM%9a?O;u7MsY-|9Y-C`2GhTt{qwc diff --git a/bcloud/__pycache__/CloudPage.cpython-35.pyc b/bcloud/__pycache__/CloudPage.cpython-35.pyc deleted file mode 100644 index 49f0504b84dc1168ba6253ed4c4376c8afd624dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14709 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 RU!;7gx8^sr3u`hI{9msP)_ni~ diff --git a/bcloud/__pycache__/Config.cpython-35.pyc b/bcloud/__pycache__/Config.cpython-35.pyc deleted file mode 100644 index 93c2340301e6cfb882bd5b9139da4eb4ddefa4d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3891 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 v!R?iL)Rvkk$a_XA9B7(FcOL=I0pX*oI~rE diff --git a/bcloud/__pycache__/DownloadPage.cpython-35.pyc b/bcloud/__pycache__/DownloadPage.cpython-35.pyc deleted file mode 100644 index 3baf3a47e2848d210b6d9d8cb0b47b12f8e28789..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27575 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 diff --git a/bcloud/__pycache__/FolderBrowserDialog.cpython-35.pyc b/bcloud/__pycache__/FolderBrowserDialog.cpython-35.pyc deleted file mode 100644 index 628a30434d6a0a8a1deb001a245bd590d5e1718d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4435 zcmZ`+-ESOM6+bhxJNx0Wy^b3UG-^awlv+otvyJ#@%FMbQu~H@yS!OHE6at}n!^cstjN4ZPf$EM1G&0hQN# zMV#;Cy4a`97qq%_zpp2s02L! zm}m`44n-yU5tg6?JTCJK4L~$V!7zY<9DbE~k32n($zh5{G+d_$Qa3a_#FUqtV`|(m z`-aRm^8wHEJGJHTfw)j)Q&X)0rydxsqB+cUViWCJv`Z8Kur**&0hWo{4(;NBDoa$9 zsqIp`qJgUJYt*i5U}!M(XstvKVQ7$RgImZ8LU05gkFfAigdU6@Z5d28_{cqT5=;lU zOuKNHQ?v_3L5+CInmY3`PVMKYIL#Ua0X%yyE{0fgw=S$L&^*5tuwA@CD6db-*KR1+(BWoA`*cRJ@>{7pZuWNwJpCY01yCWtpLK zpu!pnF6iL}YQMyEdFG3>Tc!5J{yeLRiC$udfGc3zUQN?_Su~YHGM~Yx4*Geh^=DB!!3AKY<0sl5>fLt<#t0U(n2|5 zx2wu|uPdag20@(0MGz==GftyyQ#v?94VmjcpM>kVD&Jh1y|&v=aNWxX9#R^naqlq+v z2D3C3twJ@Rs?J6f%b>4QHHI0f)p|HJvfPqcl8ET8R)wmqNFkPsObX@Xg;b^0EQ8() z%;tKw$_Q`AVpCOl@&QA`%z7>ooEn3@+7al4QKU}Ih$OiU-h>qLR=l;^TT_kWb1N{N z8W|9t$&y|tl^nKI?fS}%U|}x!>etjTNCjb0$au9^2vuFYc5^P6Sz1sdtj@!Q9Eja6 z4udY4jv8g5v&~@O6{?!w!!S$|Rfh6K(ezXa9Iwe!I8h?;kt!E)kw62h*_J=VHi3=; z9(YEf-~e{;hx^Lx552svOV|cl(7xJ&=&HsZ8)&dE`4Er1!qJP(48=(Fq79TCOh z^hTJjPe)-9PIqP2hDN7vZQtrctF0vKMbrJ)32}d_yDd*cfC;pG9vxXV{LfmW)`Zot zhOKeivps9VK7;XizsJ})Yn`!90ppbAS*P)CVAq5_j`xIJw|8DR>8!yuYVkehA5sdr zXftT}o9H;u;X$14#{&$IAa(U%k_7U^x(-l#NIniHoCui*XvhKBhG3+FM``ghYkEHZ z4^C>j@(M_+aw`#`RIV|$0Ar7 zAiqvRaT>=oGK#KfHXM@w=48r8 zL8xMckx;r!f&~!TfEHcLtZ)5fur~X>@6#UGK#r`@WPZuIKW6cu4&}VA8Lv@_Q$V)X zm$W^q%Mx7yO){=Wle@@bm4Tns3Bw$8AR8W_BXteyGk^+Z9HR1Rcke%5yRRyB!*yKvwAWE(I7ph!s}ehqD#tl|$ggo66`gLe?T@0&dVpZQ7AHcd zBJ4#}r-T3E*K8Q~tS>BGo1L500jkR3QR7r^U0Zq61TFT%AVmmo-HVe*zRpazQgkwq zW;c}I=1xZ=x0PiZF;ZTUZHP2i&f=Y$$^lX3fCI@ltvRH9Tn(9gr@h=nZGEtO3pjpb zEta?v`aq50SMP;+kRtl}$RFz>fcSnnPS>&=38j^55upzjTb00Z=jofnOmfTlMv*mU zl@LP45JFrXPF%ce);WZqx^*6K31P>@dfjr+YPO4TQ^DV{Jcr@)*2$q}aFq{34QFh= zhWhGF1L(Vh4mI!KMxZc+)osdAaap*8D0TV1p)JE5mYYtGW5Sc4eZ2qk_YQvW?&F_+ z^y#l2J^A>L`~P@!<--1NfB5*r4<7&JH;+Gf*DPZ0Pk(;$&tL4n|Ka0b|LxQF|FHk} zUrG+Ji%mzqhPU#La-fLh+nB-%pCLzhS!d7_gU=l--$%mX3e?cF<PZhbCb#SrRaU8Dr69t5bndx=1; z>;=L7UYM8_8H2RE$Q_p(+7gCmZ7_Bx$qJXu%#kJFjI1-mC)gv1d*XC~CTKNu#X1T(2zROsy`6STH97$my*0ri$HTwA`N9>%XLFr_3@x&!m K!#-!Z_WuBq9U@Es diff --git a/bcloud/__pycache__/HomePage.cpython-35.pyc b/bcloud/__pycache__/HomePage.cpython-35.pyc deleted file mode 100644 index 87740b5c5e6fd7399cd1b317d4aa079f45879519..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13814 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 diff --git a/bcloud/__pycache__/IconWindow.cpython-35.pyc b/bcloud/__pycache__/IconWindow.cpython-35.pyc deleted file mode 100644 index 8c7c1fd56d5b5c2ac5d7afd836f1efdfe66ec830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26682 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 Ph;&bJD+1zVOVR?WCz+*1NYev-3Q&GvfzG zM>7Yl@Xdcli2kKbFAekE_S;c$l*``6(NtV~q}*yX>`K|U zU8iuwG4sNCT3F>q(=zSyVmvRJM-JtbAU$i&AF$s&)UINo&DyT~@#k+p11ox>>NZSE z1j)8D@3=>u3fmsMhG5^q69Ci!5F;=ujLF74)`tu)fdYulIC~5z7H|Mil9nKxVq}2D zTYxbDrel%?q|qR|&u&@=gnPt>H|=L}-r5&Gc5i*!J9WCddVa3rI&aw4(e903dS_SH zF5T*V_51A$@2y{Xf9>4T+Mid~&Rh=9uU6E)8K>e z$R|3ck+YM0h3YD!JPu?E?ZDHHMqZwLjU_NI<`gB#F_GWw8`^HrOJ^$m2((CP2qF zC4u)AQUP$xlkY(otL41ljDH1C@ z)<@aOF^J(Ky}+?A@}ht4eVZJW`;li+F^TlN|D-A$fQRrKbw=ZK+tD{0S%O9>muP&zxGWVPYhixxzY zzP;~0!UYU3{Sf|o3Ws0$pm*^C+m{I+UifiS5rEvT$>*LAf4v^L@xl7`gCcA&0TmSou@chLHOH@%o&-(T6 zVd(Rd>wkX@nui=lx%Je(xqZ{Qp{+a0|l1XYbyZ_e{O2ryFkBj8yK2N-iTaT1>D%+b{%a zc>;$`Jiu#h-dYGo60+zJ&u7g6G~PYQyx^u zl%2{1W(llEm5iEIwqw3SSscHsRDzFTm5f85DVxIAo5QfRAjnFHTIs8t>|6();xrm$ zJrW98FVkP_;mj;Suw)VvN-5^zGCtxy*cHr76rIQKiB8ROEMZq9g$9!VO)ga%6h^#7 z%&@=~MuO2nkfr)GbUi+mz{i9VlbpoV#fP`@uyNwB5#Gf}6(-OkP$Ib$p@68A^`79~ zffI4 z9nUX26)U1HHG{su7cxjQV0mBUH4Wl(&2r5OCLHUiQ59};1DT#;1x`~v#(CQ3R!^aA zqp?<9@fc8wofrbmZq~L^JHjVP*=B7&guHPKge$fK#Ab29b}FFup?j$9s}yr1+`-vZ z!w52l(R9r=nwt@14db15xzXQA8iwgs3`2027o$AL&90UKo z*fel26iE!6ax(gGPEDxUcs4WkST-Z~keg%J4pL>)jQa3s&CUy}<$AX7iUq;7Msh7_ l6?tB6++Q}o=}758)Rte2V7 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 Ia@E}503TIjApigX diff --git a/bcloud/__pycache__/PropertiesDialog.cpython-35.pyc b/bcloud/__pycache__/PropertiesDialog.cpython-35.pyc deleted file mode 100644 index c60073b6d71c82b3c4dcc733f328acb20812ad06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4072 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 diff --git a/bcloud/__pycache__/RequestCookie.cpython-35.pyc b/bcloud/__pycache__/RequestCookie.cpython-35.pyc deleted file mode 100644 index 7e51491b1a8c4d93e51bb5feff71c9521c2fb80c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1776 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 HnZ5r7Eq%50 diff --git a/bcloud/__pycache__/Shutdown.cpython-35.pyc b/bcloud/__pycache__/Shutdown.cpython-35.pyc deleted file mode 100644 index a2266e72ce77753aa962a0ca1284b9cb7187a42c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2825 zcmZ`*&2HO95FUyYWifJW$EagBKi&K^sZv)$TA%@%AP8c+Nf1~GDjQCS1`I8(BuW&i z>{78MIOxH>6zIJ`-=NRYLoa;-UW*?53ca*5OHpBhl=2Qg?tD8tv$H$vmHByVm;b%@ z^+y1ILGCdS-@_*FqVVufg8;yuVGV2zydr#G02}{wc;M;a8So=A4B!SF>tGjYShH%L zpbco8Xee6*vu6##J#4a#DvsvSB+3E}Lz5l?oot~+oXRu7D}gts+$n=+fp-ep06z9t za?E+fJe^}=&y2Z{V=gM@l470#4{a_J)4Qo`uH=|!6>~Lbb4@Y7RLpZZ=6S`ukYi%c zZ1#&e<|m5D6!Vgr{c?_ZMKLjIjQy%&eyW()6!ZF9re6XZSKu@7s}jKaBkWf60a->hV@w zQ%=~$5zUh5`y-i@Bp0v!7N0D)qCu_YhEeFZ+@Pi$Nvvp}#yxf8?&N$O8TA>Xt{C+u zm(q{I#2oOr8+l0?r{tpTqQ!F`uvp9ZWmj}Y16(g@7dsUDWHl00|;EO*zGQ}0mfDP{V4qS9y^58WW1T=-vm8u;6yEICFKM@=r%bU9|uOtwNTs&(|xTgSG6P1aBx0rUWlfhs3r zM^jSao+^L+vg*O|2Y6hyM%75>oT1=D*B6P2C^{S`MF)4AOe(l}9XUPDRV^_j58A(h zSj36`xl7#yK54>9OOC$#Vk* zXsh~UX~xO)vrtP&IfG4w`X_?%d5AGujiP;{DO^yv0DEBtG)==|-h3Wv@a*tcwJ!(P7NtNL>SKaS{3j5HH|JgEt0*CL9$A92w9bs;{%amG4@(c5?p|4AkJ?O*S}iOk?NPw|m>u{*plTHrO~K=l2${>UE(Pv> zz|-L>wW=s$;gMJ#vx1UVIU3mzlnGHJVUnOl7jq=aD5`}hb=yg zu}&&uBe|7*S4(06J+UpB)=?Z}m(#0-prx!}q(hm8LcS+O6}sBCsaT?jPNDb#o4kqw z3|*^ei<+*LwH1_$TDf3q^V8oMZ5g%s-8nrmv)xGtk;$zpMXV3X>Zfm?o8LmE|-|n0*<$0=EHOozo*&!_z7%Xgn!I5>MkeY>9dNtZHge z-U~39%f|hJ97*|vLRqu&ab%3f$-nrBOJqz}FJU20JG7muMF$pdSnfE9O2#MyFS;x?qH;isXdKiH?1zu}LgqP%%x+ ziaGn03$ri7)XL`U3mIi=_GP~FrN6@@-CHX-Zo#OSl~qCWRtti%sIIoEDJ~LTCPC4N hYbX*k-LQ(Db6rJ3{wH&H(xtgetF4y2QmE(^{XaIk%tQbH diff --git a/bcloud/__pycache__/SigninDialog.cpython-35.pyc b/bcloud/__pycache__/SigninDialog.cpython-35.pyc deleted file mode 100644 index 360a64b207524bfbb3af8fdbdff22a6ce47bba17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16766 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 diff --git a/bcloud/__pycache__/TrashPage.cpython-35.pyc b/bcloud/__pycache__/TrashPage.cpython-35.pyc deleted file mode 100644 index e8c6f0bb658c22437006559057fac448f7c1419d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8313 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 KzwMzlq5lU4sGrFI diff --git a/bcloud/__pycache__/Uploader.cpython-35.pyc b/bcloud/__pycache__/Uploader.cpython-35.pyc deleted file mode 100644 index 149b8ec516a72c84262a04c5d2ee9d0068b15cca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4817 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 diff --git a/bcloud/__pycache__/VCodeDialog.cpython-35.pyc b/bcloud/__pycache__/VCodeDialog.cpython-35.pyc deleted file mode 100644 index d3a3c6ef58166680e10e3e61fe5058fe0a8b9002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2236 zcmZuzUvC>l5T8BY*=OgRxcS?(v{Xo-TB42+LIM;@tMrdhOH!KBBEKA)yR~zd^WAlK z-85GELMq?|@j3V=e1?5RJoGE@#LS-ExKgj)f3vf*znS^%r0eZ=>qqhLv!5FP|G?bm z;`|mi^$T_}{upEc{c7$&#$evqzx zy$@;APFl0&0t{R@!*KqNCW3P*TCt)w;YFlpm;q8*B+Rslci=i)qCV{qf>$n_;*}R> z8hRPh70|1YuE8n#>cJ-ZNZ8gP-JlZ*Mx$X3T*MSGMu<0QgDhXN)-K!aOOz`5H7!=s z`(UPb#cEuE^eV)yS(q`I0fm`h6R66}m3Ph1#)o8vxV7JH?@kt<3YiR&i0h=td%ffq zhWE|i80a@G>`W~g4T%rMQ6h{V@hm&w(a}ALT3~!0>Es31BEpsZNbF$Sz@}EPqflYK z7^F5q7{>iB+wHo>mqL|Au7o6g6Fi^+pUp^6TWrC z^Wj#^HQy>_k%~xfJvwR2=2gNl$rBxh zz3r?(SJh3NOb=W$o*I`z8h@r_SZM0UNgfx+l?w|MYwu-zsEqgh-ksYIO|buDZ|6a{ zb9;B^?nAjmp4O{{@vE)92eL!rRV8#7ivb^JI-JGEbmpZhnTSeqP{>%w@HmO}p{en* zG@T(HkBVH2T!&l=ZWidMDtVOTLrE{mw75FSqmYs)>m+E5Wmc3TH}$AWaQjejGF*&x zIo75%E-}m^Bo27rjW`wnONtg+JqnfPQXB7XuH}jG@Ln7m2qDLe7+)P0$06R-_2ja3 zyF^r|^ARoFBp(!}c2K;;^ftpV%D7Tt*kx8%uA+`43K4_Ub?ks$WKFij)}0mBVQtoQ z0@lX)8f&3+(^+BxTfuR%`o4TdL`(W;q_%@iwXr+3^u$7fPr?$@kvC9mdRU99XBSLk|_p99Fl~1?>S=H$vTj6pMoco2V1pV)Y8^U(=QyELRTvxiKqGEwY#{ z*c$c>&HeEBC$bPgig)AD=_OrncXD;!gY)cveeGlQDK_Je@xkVNBqp2H6T5-*&$EKZ zH>zl)<3cqa!CO(fsOH~3~8g{MFSu7AjyPrEiJuc znP^)c zT;$d|wq>@#ChPAHLAOp%pIi?^(+a~;5sx#P2VwYp%(H68vQ~b9hV4D)cO#EJC#j`2 z{)YfAU{mx8184biP?IF<2J$N$OnaF0q$mrO=t7=U)ump=+lEeFM6KzYuEah3b7>=9 jJ?wf_imcId40HVTw=4WN34vO~E^sBof3^PsKa&k- diff --git a/bcloud/__pycache__/Widgets.cpython-35.pyc b/bcloud/__pycache__/Widgets.cpython-35.pyc deleted file mode 100644 index 56388e3c329dffa124319a929aefd9191e0c2dff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1528 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 S)W>b@b97mp@ZGkh&-ot&ciM*l diff --git a/bcloud/__pycache__/decoder.cpython-35.pyc b/bcloud/__pycache__/decoder.cpython-35.pyc deleted file mode 100644 index f6314ab07fe700a53135c31ea2ca226ba8daba87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1778 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 MtWAVE+7hAv13@?+WdHyG diff --git a/bcloud/__pycache__/hasher.cpython-35.pyc b/bcloud/__pycache__/hasher.cpython-35.pyc deleted file mode 100644 index 59e53c948381dfcb060f5d613c27f903c27b56b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2310 zcmd5-%We}f6g{3-(meV|X{iJPgs3105m8z|2%$=BkdUeh#49Y&G#;8)o76Lv+A38S zuwcn=u;VBAiP<6+`2{xRTu*>5Xa&1YV&~fT`i{>z_RVa$TzDRRe|a$ve8Z8)qrJ=) ze`KfmRp_#k_kStUzhC>Tg+`r{Jug03}`!e z?_l4-&J7G4v^mci2Dliwh;L#wanbfh>dJc$4-OApRD;y(^`p(yGf}8h|Iy>;D^F5yuiIKn{f24WUf@r+7e`eu_4;Ab zOue_9PMvp6I-1*?ozE~6O!wn{Z6ngHu+|AT*K0aV!dl<-+EF8^t?sUltTm?E*0s@3 zGmM*&x!K=MU8XEENnBwE6{rd2vIR=1SyfPGinBvO(2$+WL-j3#mc6eWkTMS?mG%u^(E_-F^RQix^>_C9uAVBm`e9l(4+l0%Z0 zAt&cVA}-*{F$@B`EQdi3@h7a(pA=-kWOtc|O0|olvD$h=skp3Ur4mqyDpRM)dBs2*#CcQodmRE=zsoU?xoMl!sE(t~GteX^ThTR-ne2E=Y ziISC6nXO_aoE}Lysis6kiT?ZPe@)LH{p?x)qaW|UReJ}ht9RrMERtg-nvp(othO#> z$DcZIFXAHi!l|=jgi~Ub`$ss<@RnuJ@{=)jjvh;nIWM8!h?ciDR;c(Z{>yY+XB!<` z!T;;nTEyZ%1&9NpSXfy6C(QMnV3z1(QC}gdr4vw#|Foc9y7Nz{(+oAEk3~ICRLduz z7XK+hef!@3Xf4slqP|L0PfkEB{!@Z_>DI!3Xf4slqP|8{FHS%${uVF^Gfk^nw1vf- zrETPYDJv=RpJi*FkuqT9Rv0-XMmRH);z&8Qg;i>5nt!m-)7#zXp%m{}DprXFwd4eD LsaUC$irMEUrc!U$ diff --git a/bcloud/__pycache__/log.cpython-35.pyc b/bcloud/__pycache__/log.cpython-35.pyc deleted file mode 100644 index 8fcf7d9b4ac61b98bbcfe6fea48709b1aa6f49db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 964 zcmY*X&2G~`5T3Oi|D;aS6odqofJ>$N5+AuBgs7-Ms!BzLN_~l3d+XZqPqe#1N#$~Z zm*G`-0<>4ep|8M+87C3o^^SMGo&DyU@je&~`XBhO^B*R_Px$AtaQzaeyg-xU%b)~^ zR%-)F29*Jk0c^czLS$~@EQl;fT}Tn>L2AQS4DA8O7of1=3xmiZ#?kk!o48I(F7A4`nFDG`P+#}BXt!}5;*{UfD5PXi7{rIfx8?>hp*1_i+8`FR z79lc+<){ODYlNNGPry<(O#2|Nfib2WD6j&9;@L&b;G^=O=u=IUr3Y$@_*3L$RAoz% z#;pw$=2OuW=0IyhF@V}aEr+M31cTKD;4hW(yPF0_;8g2J`U7r9iD(o8vmQhTo#37@IFskJGWco-v;c2HP` ze@%NCSI4;KLKvjeJ8DD~D}|)KRpTb67&X52i4g|@_To5r#eMV6Pwp#?3FL)0KB-fM|8H{E-c zNUQ|NksLdVmmrRjcuC{dPMjdIoEO(?+&@vEn3tlcNJ%e!=|hVE1^S)2q_)^?u5^cU zXU?42&iT$aQx^#M_MiIqfVY9@@3i8nME(`LMnWM{@vl&dD6*7SD58|hZ7cG2irCBL z4vIL+c_&4j<-Cg`?sDFq*@prR%vp7Nk^ON9snJ!LS;Z%hh^P8)yd2H_4thk-C{? zuxOh}Z6tLIcN9V9DN?t}{1#T&8wxJ+9)v@RaK^J4!$iiF$_@=_`l1~bi_as;`}z${ zZ;lOV88hPU(T-}mrbk>I@wk>V^HtVwb1Ie@8ih>0DnHyD&ol+|!#hWIwYBV6lF%~o zteVISm&6uV&~sGYVc3YYrj7(6uL zq27U!ZgQ9bI_4w&0V#@NR#LKx%xX%mV=?rjyaAaf*BnOefNIC?I7VwR%fi_Y7pION z>h3#mC>&gv{bTXFwwV0~uMmSU>s<5K5(Uci2l?g{Yn;RF7W7@bOT%&p_ zl^7JxTue7K;lZbsbL!YRO*n>4Gbdc}R07*9D);yGb$4bn87*!mvKisZXl5!K7j9h} z8PyC^R19gRt{FKPjV9cOdb@NztLt_QS2#7!3$Lli;@V&=eoXj|X7zN;jA~=?kXP8z zweDg`XfySMW{Aqth@)vuAJSA|$B>1~fDxo)LP_vMGMR{jJN%0Dt!VqhFI&@^nuxU? z!{}Spm>Fx$>DeTP+uA+eUCIr{Q`u3qwe*82v|u^B=sug{Sv?Is##2bh=2vQ!8vNBN zc4dQ7r}!0*5>PhU>`J3eXSq0wl^+{2ui!PFMWVs8Bs4{AY#gu*_BA_ca7Kqr0Yq{) zMfKjSKA2EdEwewCQB#^8=VjoBe*t`!X*-aCMfQf2u$*hiB^-v9Ix6f~ePKJAo`Qu15Z4xweWY#5z+qR~t&twp247mcQ~ z>S&7d{%CY$G?ubzbe?%+bw6#ZzIU{>tr!+>nI7b18dP&q+M= z$>ql;!1e*S4oKK0A?jtQ1TG?OvU-T2B*0pciB{4CVx^0Y*+~C0nN=K8S)h`IErHCl zQpPQ1{zK-vWf{)bP{lML*wW=?)J z0|@86A@As)u%yLzKPo(!n!AJluh~Tw9(`6kbG<28xO;oy(fPuq&w4B*Z1MSmcuD{k zEPgU;wNVpsvn9BA|C5EA*NSJ)&3%7q?%q3Gb??&R)w}bTZZ-vrv*!z6ye)%k2M5=t zU@5rHfBP;vy7isZJa^~x;^nD@FODysJYBeUy71oTg%j7ItJLwrqfary!pVolk8c&u ze!VdLaQ^&_xqD~im}RhN3PMHU?CjkA>sHm=o%a_WJ}g}OvUuU--2K}vvKx$~_}S&+ zWpr@0@ac`>`Pt$J$2m|J&b&YW;H&wIGYhj<|JzRJbiQF(WQl} zA6UXo!TFing>z>Lmv0m=e^a=8YvJVAh4*gAeipv`1B9$T0cR}?-ND6^A1q$^eewMF z^H-+O6Be;}d20UtDdc$`Ru6@DP84q5Z3-?&w(u>z%^cjK?5*?|h-`Hpp#tA!u)!FE%jXt!|h>Locy)lWH!@{8;o#{?ILKEcyqehc z<}xo54qi~Q#GCgVyht>d8P>7*E9bO&pog^Mb!K^x7viyBreW1vX zbtsOeIx`L{#; zm4_DzfKER0tRzz$uiXR=g<}#TCt`hxQGh9wj#dcpGEO(ZWD$egM_!=;CKn!N5$!lU znJAaUg5x<#ZPY&IRG33BLjZ^P7juH~Su%YkqQJ)}@B{Q+K@*@3I4xV$4zA*28UZ!z zLtIxS$K|I9zdVau3??8y%)K&VkPNKnUOpjsgAR#iU$O{B$1nZW*0yDBMG1#6;g3`jvAK=OI zl7s6Mgl0rCy7_$16&`1&=1X!weDBol+rIjt$IVAu*9$CrKfNBfDy&NxnGM8W=F$ntmlpBGxDU` z+$?_rzJFrbDgX1bd+bTz%E3tR>HVc3TX{2^`OYApN_TDhZQJCw{7XMwc4v^SuhjNA zw0(NXg<4lA$JjDzOdsC`{UN7t#d2U&Doj}3Y6zF*e!`K=CU8^2bV}7im3kLOuJ1(> z@w|GdKfI@-=Z%Q3H@cMfcF8;!J34y~?u|HKJ=hU`O(-eJo`mzwSZWkEHRUl1cga62 z*VxDESDU~7D$1_oE!n(F@!`)U|7sB+{7SV96LmcmyG74y5S)$cLV?;E&x>RPX_z#k#iA`?$oGHRLf| z_z_FNXIo_CmE<|X=WQ-3U1Leq5-#h4NayJapY_p#TTtsd%iYt}*K?q&H{$L)@Osyw z{yq`t?u_>LcJ)L%_H~8(L`8Q;INH;-x2vbCM^tolc6N35MStCUC~UEfr=e96h)4}z zs!3La3#vF)0XJsbxVD88=CU$&>x?~eGvsVnERWpnAZmrD-MW|A%>>-w`xHNRch#S* iTB){Sm+fA~Yx9<@z;CbF(CDr4*Z*w8rm8LeP5%YFTj^*3 diff --git a/bcloud/__pycache__/pcs.cpython-35.pyc b/bcloud/__pycache__/pcs.cpython-35.pyc deleted file mode 100644 index 50089629bb55015e9318dcf144feea89c575734b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35954 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ⅇ=vxk4cq#xv-fExyghE+B$o1?9>UBr7AJ4^hRQ9NPt`E zjpS?4CO;m654i2yhmb8u(t=>JxG&sNyB<|YApX|m=dJiPSzgLIeP3A`{tn2`{R?#V z^hhuCHh=7so~+$amh}EPNzY4WmZqI!Omfj)Yn>v$vQ!pE9nMnE#s zkPRCOx@y@D!M$N9AXQuq1=zKLp%AQEb}OExAZvz(sSHvqf9T2l;SU$t@45>~74|+i zzH_&gmoGixEs-=0y=j*On@k7OA_3K%rT9WvE=^LCB8UQAISn-#o^&GU*OZunRgS?s zJws}sb?Pm}#R+nu$mqYonFLp~kKLK8?ZIS~zMdXUMLU5rvci0K)!?H;gZjbJ8Qfgb zmqKPJaZtCCl}I?bn$4m{T-?ttyDqUK2KbSiBHMfWhx_`#v&soq? zcWH;X6#Fh2&}H9;a9^3x)rw=ey4$h%HX@yO5Wh)1jG{)?_KD&%t26lv|5s5{8J!Vr ziq2`is`>Y#%cECB=SHt?zA}1Sv_9GpUD(nx_sZzJ=w;ECXj99T(fK$#KYDp|e)H8R fTbdU|zY&%5&DS)~Z~4~Tr8vK!c`oYDi_ZOj;%$=h diff --git a/bcloud/__pycache__/util.cpython-35.pyc b/bcloud/__pycache__/util.cpython-35.pyc deleted file mode 100644 index cc7970ce115defb3eae6ef1badf662183d31ed50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7416 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 F{U2^jaOD61 diff --git a/setup.py b/setup.py index 8eacf95..088ad3f 100755 --- a/setup.py +++ b/setup.py @@ -34,10 +34,10 @@ def build_data_files(): description = 'Baidu Pan client for Linux Desktop users', version = bcloud.__version__, license = 'GPLv3', - url = 'https://github.com/LiuLang/bcloud', + url = 'https://github.com/Yufeikang/bcloud', - author = 'LiuLang', - author_email = 'gsushzhsosgsu@gmail.com', + author = 'KangYufei', + author_email = 'kyf0722@gmail.com', packages = ['bcloud', ], scripts = scripts, From 8270aaba63b98c41467ff9ba7385ec02966b0a08 Mon Sep 17 00:00:00 2001 From: xbbsky Date: Fri, 2 Dec 2016 18:28:31 +0800 Subject: [PATCH 08/32] edit .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 65e3ba2..05079cd 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ test/ +__pycache__/ +*.py[cod] From 656acc1062c7fa5c9bcd7d63fdb855cccefafc37 Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 15 Dec 2016 14:11:44 +0800 Subject: [PATCH 09/32] readme --- HISTORY | 4 ++++ README.md | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/HISTORY b/HISTORY index 42d00ab..39983a6 100644 --- a/HISTORY +++ b/HISTORY @@ -1,3 +1,7 @@ +v3.9.0 - 2016.11.25 +* 修复各种网络错误 (by @Yufeikang). +* 修复验证码问题 (by @Yufeikang). + v3.8.2 - 2015.12.25 * Fixed: failed to get bdstoken (pull#214, by @zhaihj). diff --git a/README.md b/README.md index f4f06dd..c7a8e00 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,11 @@ bcloud 是[百度网盘](http://pan.baidu.com)的Linux桌面客户端. 安装 ======= -请用户直接到 [bcloud-packages](https://github.com/LiuLang/bcloud-packages) -下载发行版相对应的安装包, 比如deb, rpm等.. +需要Python3支持 +安装执行: +``` +python3 setup.py +``` Q&A === From 949ab07120041fc126dba14f40839c2cbb569440 Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 15 Dec 2016 14:16:53 +0800 Subject: [PATCH 10/32] readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c7a8e00..ef9ba1c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ 关于 ===== bcloud 是[百度网盘](http://pan.baidu.com)的Linux桌面客户端. +[原项目地址](https://github.com/LiuLang/bcloud),大神@Liulang很久没有维护了。最近迁移到linux平台发现了这个好工具,还好自己学过Python,稍微修改了一下,现在可以使用了。如果没有大的变故,我来维护这个项目,方便国内的Linux党 已经支持的Linux系统/版本: From 77f023cd42312a41c7b014cd48cbc4967a222f0d Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 15 Dec 2016 14:18:07 +0800 Subject: [PATCH 11/32] readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ef9ba1c..7c06ba1 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ 关于 ===== bcloud 是[百度网盘](http://pan.baidu.com)的Linux桌面客户端. -[原项目地址](https://github.com/LiuLang/bcloud),大神@Liulang很久没有维护了。最近迁移到linux平台发现了这个好工具,还好自己学过Python,稍微修改了一下,现在可以使用了。如果没有大的变故,我来维护这个项目,方便国内的Linux党 + +>[原项目地址](https://github.com/LiuLang/bcloud),大神@Liulang很久没有维护了。最近迁移到linux平台发现了这个好工具,还好自己学过Python,稍微修改了一下,现在可以使用了。如果没有大的变故,我来维护这个项目,方便国内的Linux党 已经支持的Linux系统/版本: From 0484ce312803ee5917366c272caff3a0e957f0c4 Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 15 Dec 2016 14:18:52 +0800 Subject: [PATCH 12/32] readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7c06ba1..fa9ff8f 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ bcloud 是[百度网盘](http://pan.baidu.com)的Linux桌面客户端. * OpenSuse 13 * Ubuntu 14.04 * Ubuntu 13.10 +* Ubuntu 16.04 * Linux Mint 17 From 7b90fe61a62b8bdb555cc99e1bcea7beb6620e9e Mon Sep 17 00:00:00 2001 From: kang Date: Sun, 12 Feb 2017 19:55:19 +0800 Subject: [PATCH 13/32] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9C=80=E8=BF=91?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E7=9A=84=E6=97=A0=E6=B3=95=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bcloud/RequestCookie.py | 1 + bcloud/auth.py | 2 +- bcloud/const.py | 2 +- bcloud/gutil.py | 2 +- bcloud/net.py | 60 ++++++++++++++++++++++++++++------------- bcloud/pcs.py | 2 +- 6 files changed, 47 insertions(+), 22 deletions(-) diff --git a/bcloud/RequestCookie.py b/bcloud/RequestCookie.py index 870776f..2bdf8e3 100644 --- a/bcloud/RequestCookie.py +++ b/bcloud/RequestCookie.py @@ -41,3 +41,4 @@ def load_list(self, raw_items): return for item in raw_items: self.load(item) + diff --git a/bcloud/auth.py b/bcloud/auth.py index 3b93571..7f452b6 100644 --- a/bcloud/auth.py +++ b/bcloud/auth.py @@ -304,7 +304,7 @@ def get_bdstoken(cookie): 这些token对于之后的请求非常重要. ''' url = const.PAN_REFERER - req = net.urlopen(url, headers={'Cookie': cookie.header_output()}) + req = net.urlopen(url, headers={'Cookie': cookie.header_output()}, cookie=cookie) if req: return parse_bdstoken(req.data.decode()) else: diff --git a/bcloud/const.py b/bcloud/const.py index 7fc33a0..fa68b98 100644 --- a/bcloud/const.py +++ b/bcloud/const.py @@ -20,7 +20,7 @@ USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.2.0' PAN_URL = 'http://pan.baidu.com/' PAN_API_URL = PAN_URL + 'api/' -PAN_REFERER = 'http://pan.baidu.com/disk/home' +PAN_REFERER = 'https://pan.baidu.com/disk/home' SHARE_REFERER = PAN_URL + 'share/manage' # 一般的服务器名 diff --git a/bcloud/gutil.py b/bcloud/gutil.py index 60607cd..7b83083 100644 --- a/bcloud/gutil.py +++ b/bcloud/gutil.py @@ -61,7 +61,7 @@ # 下载的文件保存到 'save-dir': Config.HOME_DIR, # 同时进行的下载任务数, 1~5 - 'concurr-download': 2, + 'concurr-download': 5, # 下载单个任务的线程数 1~10 'download-segments': 8, # 隔5分钟后尝试重新下载 diff --git a/bcloud/net.py b/bcloud/net.py index ca888df..5dd1112 100644 --- a/bcloud/net.py +++ b/bcloud/net.py @@ -1,4 +1,3 @@ - # Copyright (C) 2014-2015 LiuLang # Use of this source code is governed by GPLv3 license that can be found # in http://www.gnu.org/licenses/gpl-3.0.html @@ -13,6 +12,8 @@ import urllib.request import zlib +from bcloud.RequestCookie import RequestCookie + from bcloud import const from bcloud.log import logger @@ -20,9 +21,10 @@ TIMEOUT = 50 default_headers = { - 'User-agent': const.PC_USER_AGENT, + 'User-agent': const.USER_AGENT, 'Referer': const.PAN_REFERER, - #'x-requested-with': 'XMLHttpRequest', + 'Host': 'pan.baidu.com', + # 'x-requested-with': 'XMLHttpRequest', 'Accept': const.ACCEPT_JSON, 'Accept-language': 'zh-cn, zh;q=0.5', 'Accept-encoding': 'gzip, deflate', @@ -30,6 +32,7 @@ 'Cache-control': 'no-cache', } + def urloption(url, headers={}, retries=RETRIES): '''发送OPTION 请求''' headers_merged = default_headers.copy() @@ -44,15 +47,14 @@ def urloption(url, headers={}, retries=RETRIES): return resp except OSError: logger.error(traceback.format_exc()) - #return None + # return None except: logger.error(traceback.format_exc()) - #return None + # return None return None class ForbiddenHandler(urllib.request.HTTPErrorProcessor): - def http_error_403(self, req, fp, code, msg, headers): return fp @@ -66,13 +68,30 @@ def urlopen_simple(url, retries=RETRIES, timeout=TIMEOUT): return urllib.request.urlopen(url, timeout=timeout) except OSError: logger.error(traceback.format_exc()) - - except : + + except: logger.error(traceback.format_exc()) - + return None -def urlopen(url, headers={}, data=None, retries=RETRIES, timeout=TIMEOUT): + +class myRedirctHandler(urllib.request.HTTPRedirectHandler): + def __init__(self, cookies=RequestCookie()): + self.cookies = cookies + + def http_error_302(self, req, fp, code, msg, headers): + cookie = headers.get_all('Set-Cookie') + self.cookies.load_list(cookie) + + return super().http_error_302(req, fp, code, msg, headers) + + def redirect_request(self, req, fp, code, msg, headers, newurl): + if self.cookies is not None: + req.add_header('Cookie', self.cookies.header_output()) + return super().redirect_request(req, fp, code, msg, headers, newurl) + + +def urlopen(url, headers={}, data=None, retries=RETRIES, timeout=TIMEOUT, cookie=RequestCookie()): '''打开一个http连接, 并返回Request. headers 是一个dict. 默认提供了一些项目, 比如User-Agent, Referer等, 就 @@ -86,8 +105,9 @@ def urlopen(url, headers={}, data=None, retries=RETRIES, timeout=TIMEOUT): headers_merged = default_headers.copy() for key in headers.keys(): headers_merged[key] = headers[key] - opener = urllib.request.build_opener(ForbiddenHandler) - opener.addheaders = [(k, v) for k,v in headers_merged.items()] + redirectHandler = myRedirctHandler(cookie) + opener = urllib.request.build_opener(ForbiddenHandler, redirectHandler) + opener.addheaders = [(k, v) for k, v in headers_merged.items()] for i in range(retries): try: @@ -99,14 +119,15 @@ def urlopen(url, headers={}, data=None, retries=RETRIES, timeout=TIMEOUT): elif encoding == 'deflate': req.data = zlib.decompress(req.data, -zlib.MAX_WBITS) return req - except OSError: + except OSError as e: logger.error(traceback.format_exc()) - + except: logger.error(traceback.format_exc()) - + return None + def urlopen_without_redirect(url, headers={}, data=None, retries=RETRIES): '''请求一个URL, 并返回一个Response对象. 不处理重定向. @@ -130,9 +151,10 @@ def urlopen_without_redirect(url, headers={}, data=None, retries=RETRIES): logger.error(traceback.format_exc()) except: logger.error(traceback.format_exc()) - #return None + # return None return None + def post_multipart(url, headers, fields, files, retries=RETRIES): content_type, body = encode_multipart_formdata(fields, files) schema = urllib.parse.urlparse(url) @@ -159,9 +181,10 @@ def post_multipart(url, headers, fields, files, retries=RETRIES): logger.error(traceback.format_exc()) except: logger.error(traceback.format_exc()) - #return None + # return None return None + def encode_multipart_formdata(fields, files): BOUNDARY = b'----------ThIs_Is_tHe_bouNdaRY_$' S_BOUNDARY = b'--' + BOUNDARY @@ -172,7 +195,7 @@ def encode_multipart_formdata(fields, files): for (key, value) in fields: l.append(S_BOUNDARY) l.append('Content-Disposition: form-data; name="{0}"'.format( - key).encode()) + key).encode()) l.append(BLANK) l.append(value.encode()) for (key, filename, content) in files: @@ -188,5 +211,6 @@ def encode_multipart_formdata(fields, files): content_type = 'multipart/form-data; boundary={0}'.format(BOUNDARY.decode()) return content_type, body + def get_content_type(filename): return mimetypes.guess_type(filename)[0] or 'application/octet-stream' diff --git a/bcloud/pcs.py b/bcloud/pcs.py index 9b41286..99dffb9 100644 --- a/bcloud/pcs.py +++ b/bcloud/pcs.py @@ -199,7 +199,7 @@ def enable_share(cookie, tokens, fid_list): ''' url = ''.join([ const.PAN_URL, - 'share/set?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'share/set?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1&app_id=250528', '&bdstoken=', tokens['bdstoken'], ]) data = encoder.encode_uri( From 182d6bf824c3687510867b2cf917036659d86057 Mon Sep 17 00:00:00 2001 From: kang Date: Fri, 10 Mar 2017 01:01:29 +0800 Subject: [PATCH 14/32] =?UTF-8?q?=E7=BB=A7=E7=BB=AD=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bcloud/auth.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/bcloud/auth.py b/bcloud/auth.py index 7f452b6..c129da9 100644 --- a/bcloud/auth.py +++ b/bcloud/auth.py @@ -222,10 +222,13 @@ def post_login(cookie, tokens, username, password, rsakey, verifycode='', ''' url = const.PASSPORT_LOGIN data = ''.join([ - 'staticpage=http://www.baidu.com/cache/user/html/v3Jump.html', + 'staticpage=http%3A%2F%2Fyun.baidu.com%2Fres%2Fstatic%2Fthirdparty%2Fpass_v3_jump.html', + 'tpl=netdisk', + 'subpro=netdisk_web', + 'u=http%3A%2F%2Fyun.baidu.com%2Fdisk%2Fhome', '&charset=UTF-8', '&token=', tokens['token'], - '&tpl=pp&subpro=&apiver=v3', + '&apiver=v3', '&tt=', util.timestamp(), '&codestring=', codestring, '&safeflg=0&u=http%3A%2F%2Fwww.baidu.com%2F', @@ -244,7 +247,7 @@ def post_login(cookie, tokens, username, password, rsakey, verifycode='', headers = { 'Accept': const.ACCEPT_HTML, 'Cookie': cookie.sub_output('BAIDUID', 'HOSUPPORT', 'UBI'), - 'Referer': const.REFERER, + 'Referer': 'https://pan.baidu.com/', 'Connection': 'Keep-Alive', } req = net.urlopen(url, headers=headers, data=data.encode()) @@ -265,7 +268,7 @@ def post_login(cookie, tokens, username, password, rsakey, verifycode='', elif err_no == 18: return (0, auth_cookie) # 要输入验证码 - elif err_no == 257: + elif err_no == 257 or err_no == 7: return (err_no, query) # 需要短信验证 elif err_no == 400031: From 3847155641d29a66cdda67eef14876a288f285ac Mon Sep 17 00:00:00 2001 From: kang Date: Fri, 10 Mar 2017 01:26:37 +0800 Subject: [PATCH 15/32] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dget=5Fuser=5Fuk?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bcloud/log.py | 2 +- bcloud/net.py | 3 +++ bcloud/pcs.py | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/bcloud/log.py b/bcloud/log.py index fdbcb76..1b60b82 100644 --- a/bcloud/log.py +++ b/bcloud/log.py @@ -19,7 +19,7 @@ def _init_logger(log_level, maxBytes=5 * 1024 * 1024, backupCount=5): looger = logging.getLogger('bcloud') file_handler = RotatingFileHandler(log_file, maxBytes=maxBytes, backupCount=backupCount) - formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') + formatter = logging.Formatter('%(asctime)s %(filename)s :%(lineno)s %(levelname)s %(message)s') file_handler.setFormatter(formatter) looger.addHandler(file_handler) if log_level == logging.DEBUG: diff --git a/bcloud/net.py b/bcloud/net.py index 5dd1112..5789eca 100644 --- a/bcloud/net.py +++ b/bcloud/net.py @@ -76,6 +76,9 @@ def urlopen_simple(url, retries=RETRIES, timeout=TIMEOUT): class myRedirctHandler(urllib.request.HTTPRedirectHandler): + ''' + 该处理保证 302 跳转不丢失cookies + ''' def __init__(self, cookies=RequestCookie()): self.cookies = cookies diff --git a/bcloud/pcs.py b/bcloud/pcs.py index 99dffb9..576a26f 100644 --- a/bcloud/pcs.py +++ b/bcloud/pcs.py @@ -43,7 +43,7 @@ def get_quota(cookie, tokens): def get_user_uk(cookie, tokens): '''获取用户的uk''' url = 'http://yun.baidu.com' - req = net.urlopen(url, headers={'Cookie': cookie.header_output()}) + req = net.urlopen(url, headers={'Cookie': cookie.header_output()}, cookie=cookie) if req: content = req.data.decode() match = re.findall(',\"uk\":(\d+),', content) From f6fcb3b9dae5c4681bf6e4c1e160c9ad2ba05a3d Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 5 Apr 2017 19:33:14 +0800 Subject: [PATCH 16/32] update readme --- .gitignore | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- README.md | 7 +++++-- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 05079cd..d418205 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,47 @@ -test/ -__pycache__/ -*.py[cod] +__pycache__ +# Built application files +*.apk +*.ap_ + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# Intellij +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/libraries +.idea/ +# Keystore files +*.jks + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild diff --git a/README.md b/README.md index fa9ff8f..9cf93cc 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ + 关于 ===== bcloud 是[百度网盘](http://pan.baidu.com)的Linux桌面客户端. ->[原项目地址](https://github.com/LiuLang/bcloud),大神@Liulang很久没有维护了。最近迁移到linux平台发现了这个好工具,还好自己学过Python,稍微修改了一下,现在可以使用了。如果没有大的变故,我来维护这个项目,方便国内的Linux党 +>[原项目地址](https://github.com/LiuLang/bcloud),大神@Liulang很久没有维护了。最近迁移到linux平台发现了这个好工具,还好自己学过Python,稍微修改了一下,现在可以使用了。如果没有大的变故,我来维护这个项目,方便国内的Linux党。如有问题,欢迎issues 已经支持的Linux系统/版本: @@ -20,6 +21,7 @@ bcloud 是[百度网盘](http://pan.baidu.com)的Linux桌面客户端. * Linux Mint 17 + 类似项目 ======= [bypy](https://github.com/houtianze/bypy) 终端里使用的百度网盘客户端, 它 @@ -34,9 +36,10 @@ bcloud 是[百度网盘](http://pan.baidu.com)的Linux桌面客户端. 需要Python3支持 安装执行: ``` -python3 setup.py +python3 setup.py install ``` + Q&A === 1.为什么bcloud不支持本地与远程服务器同步? From 160a487f9e5b929f57bd851b5580bea877efcd74 Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 5 Apr 2017 19:37:38 +0800 Subject: [PATCH 17/32] update gitigro --- .gitignore | 1 + bcloud/__init__.pyc | Bin 179 -> 0 bytes 2 files changed, 1 insertion(+) delete mode 100644 bcloud/__init__.pyc diff --git a/.gitignore b/.gitignore index d418205..0ccfbbb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.pyc __pycache__ # Built application files *.apk diff --git a/bcloud/__init__.pyc b/bcloud/__init__.pyc deleted file mode 100644 index edd8cb126059d381b967f3624046d35e29733cad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmZSn%*z#;`ZPS50SXv_v;zsk|K+FID_#r4w From 4ec6da009961d5811e8ce784ea0913f1dea6686f Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 5 Apr 2017 19:51:48 +0800 Subject: [PATCH 18/32] Create .travis.yml --- .travis.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..773d962 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,16 @@ +language: python +python: + - "3.2" + - "3.3" + - "3.4" + - "3.5" + - "3.6" + - "nightly" # currently points to 3.7-dev +# command to install dependencies +install: "pip install -r requirements.txt" + # Build/test dependencies + - pip install -r requirements.txt + # Get fab to test fab + - python3 setup.py install +# command to run tests +script: pytest From 6b97b79615e4521949de21a870a4092e765775da Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 5 Apr 2017 19:53:49 +0800 Subject: [PATCH 19/32] Update .travis.yml --- .travis.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 773d962..c2452ff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,8 +9,7 @@ python: # command to install dependencies install: "pip install -r requirements.txt" # Build/test dependencies - - pip install -r requirements.txt + #- pip3 install -r requirements.txt # Get fab to test fab - python3 setup.py install -# command to run tests -script: pytest + From 88a0de63395a8b33cf2c2285df9cca58dc558d46 Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 5 Apr 2017 19:55:52 +0800 Subject: [PATCH 20/32] Update .travis.yml --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index c2452ff..08f2ae8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,9 +5,8 @@ python: - "3.4" - "3.5" - "3.6" - - "nightly" # currently points to 3.7-dev # command to install dependencies -install: "pip install -r requirements.txt" +install: # Build/test dependencies #- pip3 install -r requirements.txt # Get fab to test fab From eeb558f89edbb9e080d72470a9196b206d6d17c6 Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 5 Apr 2017 19:58:21 +0800 Subject: [PATCH 21/32] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 08f2ae8..7420d4c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,5 +10,5 @@ install: # Build/test dependencies #- pip3 install -r requirements.txt # Get fab to test fab - - python3 setup.py install + - python setup.py install From 63f5458ca28c55a5281391b00dd06716169aa552 Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 6 Apr 2017 10:36:38 +0800 Subject: [PATCH 22/32] =?UTF-8?q?cookies=20=E6=9C=89=E6=95=88=E6=9C=9F?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BA1=E4=B8=AA=E6=9C=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bcloud/Config.py | 7 +- bcloud/SigninDialog.py | 28 ++++--- bcloud/gutil.py | 29 +++++-- bcloud/pcs.py | 166 +++++++++++++++++++++++++---------------- 4 files changed, 144 insertions(+), 86 deletions(-) diff --git a/bcloud/Config.py b/bcloud/Config.py index fbaec74..a343bd2 100644 --- a/bcloud/Config.py +++ b/bcloud/Config.py @@ -1,4 +1,3 @@ - # Copyright (C) 2014-2015 LiuLang # Use of this source code is governed by GPLv3 license that can be found # in http://www.gnu.org/licenses/gpl-3.0.html @@ -71,6 +70,7 @@ 'profiles': [], } + def check_first(): '''这里, 要创建基本的目录结构''' if not os.path.exists(CONF_DIR): @@ -78,6 +78,7 @@ def check_first(): if not os.path.exists(CACHE_DIR): os.makedirs(CACHE_DIR, exist_ok=True) + def load_conf(): '''获取基本设定信息, 里面存放着所有可用的profiles, 以及默认的profile''' if os.path.exists(_conf_file): @@ -87,10 +88,12 @@ def load_conf(): dump_conf(_base_conf) return _base_conf + def dump_conf(conf): with open(_conf_file, 'w') as fh: json.dump(conf, fh) + def get_cache_path(profile_name): '''获取这个帐户的缓存目录, 如果不存在, 就创建它''' path = os.path.join(CACHE_DIR, profile_name, 'cache') @@ -98,6 +101,7 @@ def get_cache_path(profile_name): os.makedirs(path, exist_ok=True) return path + def get_tmp_path(profile_name): '''获取这个帐户的临时文件目录, 可以存放验证码图片, 上传时的文件分片等''' path = os.path.join(CACHE_DIR, profile_name, 'tmp') @@ -105,6 +109,7 @@ def get_tmp_path(profile_name): os.makedirs(path, exist_ok=True) return path + def load_color_schema(): if not os.path.exists(COLOR_SCHEMA): return [] diff --git a/bcloud/SigninDialog.py b/bcloud/SigninDialog.py index b9cc62f..da4c198 100644 --- a/bcloud/SigninDialog.py +++ b/bcloud/SigninDialog.py @@ -1,4 +1,3 @@ - # Copyright (C) 2014-2015 LiuLang # Use of this source code is governed by GPLv3 license that can be found # in http://www.gnu.org/licenses/gpl-3.0.html @@ -12,6 +11,7 @@ from bcloud import auth from bcloud import Config + _ = Config._ from bcloud import gutil from bcloud.log import logger @@ -19,7 +19,7 @@ from bcloud import util from bcloud import Widgets -DELTA = 1 * 24 * 60 * 60 # 1 days +DELTA = 30 * 24 * 60 * 60 # 1 days class SigninVcodeDialog(Gtk.Dialog): @@ -120,7 +120,6 @@ def on_vcode_confirm_clicked(self, button): class SigninDialog(Gtk.Dialog): - profile = None password_changed = False @@ -131,7 +130,7 @@ def __init__(self, app, auto_signin=True): self.set_default_size(460, 260) self.set_border_width(15) - + self.conf = Config.load_conf() self.profile = None @@ -140,7 +139,7 @@ def __init__(self, app, auto_signin=True): username_ls = Gtk.ListStore(str) for username in self.conf['profiles']: - username_ls.append([username,]) + username_ls.append([username, ]) self.username_combo = Gtk.ComboBox.new_with_entry() self.username_combo.set_model(username_ls) self.username_combo.set_entry_text_column(0) @@ -156,7 +155,7 @@ def __init__(self, app, auto_signin=True): box.pack_start(self.password_entry, False, False, 0) self.remember_check = Gtk.CheckButton.new_with_label( - _('Remember Password')) + _('Remember Password')) self.remember_check.props.margin_top = 20 if Config.GTK_GE_312: self.remember_check.props.margin_start = 20 @@ -166,7 +165,7 @@ def __init__(self, app, auto_signin=True): self.remember_check.connect('toggled', self.on_remember_check_toggled) self.signin_check = Gtk.CheckButton.new_with_label( - _('Signin Automatically')) + _('Signin Automatically')) self.signin_check.set_sensitive(False) if Config.GTK_GE_312: self.signin_check.props.margin_start = 20 @@ -185,7 +184,7 @@ def __init__(self, app, auto_signin=True): box.pack_end(self.infobar, False, False, 0) info_content = self.infobar.get_content_area() self.info_label = Gtk.Label.new( - _('Failed to sign in, please try again.')) + _('Failed to sign in, please try again.')) info_content.pack_start(self.info_label, False, False, 0) box.show_all() @@ -223,7 +222,7 @@ def on_username_changed(self, combo): def use_profile(self, username): model = self.username_combo.get_model() - for row in model: + for row in model: if row[0] == username: self.username_combo.set_active_iter(row.iter) break @@ -299,7 +298,7 @@ def on_post_login(info, error=None): logger.error('SigninDialog.on_post_login: %s, %s' % (info, error)) self.signin_failed( - _('Login failed, please try again')) + _('Login failed, please try again')) else: errno, query = info if errno == 0: @@ -333,13 +332,13 @@ def on_post_login(info, error=None): # 验证码错误 elif errno == 6: self.signin_failed( - _('Verfication code error, please try again')) + _('Verfication code error, please try again')) # 需要短信验证 elif errno == 400031: logger.error('SigninDialog.on_post_login: %s, %s' % (info, error)) self.signin_failed( - _('Does not support SMS/Email verification!')) + _('Does not support SMS/Email verification!')) # 登录失败,请在弹出的窗口操作,或重新登录 elif errno == 120021: logger.error('SigninDialog.on_post_login: %s, %s' % @@ -371,7 +370,7 @@ def on_get_public_key(info, error=None): logger.error('SigninDialog.on_get_public_key: %s, %s' % (info, error)) self.signin_failed( - _('Failed to request public key, please try again')) + _('Failed to request public key, please try again')) else: pubkey = info['pubkey'] nonlocal rsakey @@ -443,13 +442,12 @@ def on_get_BAIDUID(uid_cookie, error=None): logger.error('SigninDialog.on_get_BAIDUID: %s, %s' % (uid_cookie, error)) self.signin_failed( - _('Failed to get BAIDUID cookie, please try again.')) + _('Failed to get BAIDUID cookie, please try again.')) else: cookie.load_list(uid_cookie) self.signin_button.set_label(_('Get TOKEN...')) gutil.async_call(auth.get_token, cookie, callback=on_get_token) - username = self.username_combo.get_child().get_text() password = self.password_entry.get_text() # 使用本地的缓存token, 有效期是三天 diff --git a/bcloud/gutil.py b/bcloud/gutil.py index 7b83083..033d8ee 100644 --- a/bcloud/gutil.py +++ b/bcloud/gutil.py @@ -1,4 +1,3 @@ - # Copyright (C) 2014-2015 LiuLang # Use of this source code is governed by GPLv3 license that can be found # in http://www.gnu.org/licenses/gpl-3.0.html @@ -20,8 +19,10 @@ from bcloud import net from bcloud import pcs from bcloud import util + try: import keyring + keyring_available = True try: keyring.set_password("test", "utest", "ptest"); @@ -95,7 +96,7 @@ 'VideoPage': 0, }, } -RETRIES = 3 # 调用keyring模块与libgnome-keyring交互的尝试次数 +RETRIES = 3 # 调用keyring模块与libgnome-keyring交互的尝试次数 AVATAR_UPDATE_INTERVAL = 604800 # 用户头像更新频率, 默认是7天 @@ -105,6 +106,7 @@ def async_call(func, *args, callback=None): If error occurs in `func`, error will keep the traceback and passed to `callback` as second parameter. Always check `error` is not None. ''' + def do_call(): result = None error = None @@ -121,6 +123,7 @@ def do_call(): thread.daemon = True thread.start() + def xdg_open(uri): '''使用桌面环境中默认的程序打开指定的URI @@ -133,6 +136,7 @@ def xdg_open(uri): except FileNotFoundError: logger.error(traceback.format_exc()) + def update_liststore_image(liststore, tree_iters, col, pcs_files, dir_name, icon_size=96): '''下载文件缩略图, 并将它显示到liststore里. @@ -141,6 +145,7 @@ def update_liststore_image(liststore, tree_iters, col, pcs_files, dir_name, dir_name - 缓存目录, 下载到的图片会保存这个目录里. size - 指定图片的缩放大小, 默认是96px. ''' + def update_image(filepath, tree_iter): try: pix = GdkPixbuf.Pixbuf.new_from_file_at_size(filepath, icon_size, @@ -184,6 +189,7 @@ def dump_image(url, filepath): if status: GLib.idle_add(update_image, filepath, tree_iter) + def update_share_image(liststore, tree_iters, col, large_col, pcs_files, dir_name, icon_size, large_icon_size): '''下载文件缩略图, 并将它显示到liststore里. @@ -192,6 +198,7 @@ def update_share_image(liststore, tree_iters, col, large_col, pcs_files, pcs_files - 里面包含了几个必要的字段. dir_name - 缓存目录, 下载到的图片会保存这个目录里. ''' + def update_image(filepath, tree_iter): try: tree_path = liststore.get_path(tree_iter) @@ -204,7 +211,7 @@ def update_image(filepath, tree_iter): height * icon_size // width, GdkPixbuf.InterpType.NEAREST) liststore[tree_path][col] = small_pix - liststore[tree_path][large_col] = pix + liststore[tree_path][large_col] = pix except GLib.GError: logger.error(traceback.format_exc()) @@ -240,6 +247,7 @@ def dump_image(url, filepath): if status: GLib.idle_add(update_image, filepath, tree_iter) + def update_avatar(cookie, tokens, dir_name): '''获取用户头像信息''' uk = pcs.get_user_uk(cookie, tokens) @@ -250,8 +258,8 @@ def update_avatar(cookie, tokens, dir_name): return None img_path = os.path.join(dir_name, 'avatar.jpg') if (os.path.exists(img_path) and - time.time() - os.stat(img_path).st_mtime <= AVATAR_UPDATE_INTERVAL): - return (uk, user_info['uname'], img_path) + time.time() - os.stat(img_path).st_mtime <= AVATAR_UPDATE_INTERVAL): + return uk, user_info['uname'], img_path img_url = user_info['avatar_url'] if not img_url: return None @@ -261,7 +269,8 @@ def update_avatar(cookie, tokens, dir_name): return None with open(img_path, 'wb') as fh: fh.write(req.data) - return (uk, user_info['uname'], img_path) + return uk, user_info['uname'], img_path + def ellipse_text(text, length=10): if len(text) < length: @@ -269,6 +278,7 @@ def ellipse_text(text, length=10): else: return text[:8] + '..' + def load_profile(profile_name): '''读取特定帐户的配置信息 @@ -291,7 +301,7 @@ def load_profile(profile_name): for i in range(RETRIES): try: profile['password'] = keyring.get_password( - Config.DBUS_APP_NAME, profile['username']) + Config.DBUS_APP_NAME, profile['username']) break except (keyring.errors.InitError, dbus.exceptions.DBusException): logger.error(traceback.format_exc()) @@ -301,6 +311,7 @@ def load_profile(profile_name): profile['password'] = '' return profile + def dump_profile(profile): '''保存帐户的配置信息. @@ -322,10 +333,12 @@ def dump_profile(profile): with open(path, 'w') as fh: json.dump(profile, fh) + def reach_scrolled_bottom(adj): '''在ScrolledWindow里面, 滚动到了底部, 就需要尝试载入下一页的内容''' return (adj.get_upper() - adj.get_page_size() - adj.get_value()) < 80 + def tree_model_natsort(model, row1, row2, user_data=None): '''用natural sorting算法对TreeModel的一个column进行排序''' sort_column, sort_type = model.get_sort_column_id() @@ -339,10 +352,12 @@ def tree_model_natsort(model, row1, row2, user_data=None): else: return 1 + def escape(tooltip): '''Escape special characters in tooltip text''' return GLib.markup_escape_text(tooltip) + def text_buffer_get_all_text(buf): '''Get all text in a GtkTextBuffer''' return buf.get_text(buf.get_start_iter(), buf.get_end_iter(), False) diff --git a/bcloud/pcs.py b/bcloud/pcs.py index 576a26f..b1f8720 100644 --- a/bcloud/pcs.py +++ b/bcloud/pcs.py @@ -1,4 +1,3 @@ - # Copyright (C) 2014-2015 LiuLang # Use of this source code is governed by GPLv3 license that can be found # in http://www.gnu.org/licenses/gpl-3.0.html @@ -30,7 +29,7 @@ def get_quota(cookie, tokens): '''获取当前的存储空间的容量信息.''' url = ''.join([ const.PAN_API_URL, - 'quota?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'quota?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&t=', util.timestamp(), ]) req = net.urlopen(url, headers={'Cookie': cookie.header_output()}) @@ -40,6 +39,7 @@ def get_quota(cookie, tokens): else: return None + def get_user_uk(cookie, tokens): '''获取用户的uk''' url = 'http://yun.baidu.com' @@ -53,6 +53,7 @@ def get_user_uk(cookie, tokens): logger.warn('pcs.get_user_uk(), failed to parse uk, %s' % url) return None + def get_user_info(tokens, uk): '''获取用户的部分信息. @@ -61,7 +62,7 @@ def get_user_info(tokens, uk): ''' url = ''.join([ const.PAN_URL, - 'pcloud/user/getinfo?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'pcloud/user/getinfo?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&bdstoken=', tokens['bdstoken'], '&query_uk=', uk, '&t=', util.timestamp(), @@ -73,6 +74,7 @@ def get_user_info(tokens, uk): return info['user_info'] return None + def list_share(cookie, tokens, uk, page=1): '''获取用户已经共享的所有文件的信息 @@ -90,7 +92,7 @@ def list_share(cookie, tokens, uk, page=1): '&start=', str(start), '&limit=', str(num), '&query_uk=', str(uk), - '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + '&channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&bdstoken=', tokens['bdstoken'], ]) req = net.urlopen(url, headers={ @@ -103,6 +105,7 @@ def list_share(cookie, tokens, uk, page=1): else: return None + def list_share_files(cookie, tokens, uk, shareid, dirname, page=1): '''列举出用户共享的某一个目录中的文件信息 @@ -116,7 +119,7 @@ def list_share_files(cookie, tokens, uk, shareid, dirname, page=1): return list_share_single_file(cookie, tokens, uk, shareid) url = ''.join([ const.PAN_URL, - 'share/list?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1&num=50', + 'share/list?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1&num=50', '&t=', util.timestamp(), '&page=', str(page), '&dir=', encoder.encode_uri_component(dirname), @@ -138,6 +141,7 @@ def list_share_files(cookie, tokens, uk, shareid, dirname, page=1): return info['list'] return list_share_single_file(cookie, tokens, uk, shareid) + def list_share_single_file(cookie, tokens, uk, shareid): '''获取单独共享出来的文件. @@ -145,13 +149,14 @@ def list_share_single_file(cookie, tokens, uk, shareid): * http://pan.baidu.com/wap/link?uk=202032639&shareid=420754&third=0 * http://pan.baidu.com/share/link?uk=202032639&shareid=420754 ''' + def parse_share_page(content): tree = html.fromstring(content) script_sel = CSS('script') scripts = script_sel(tree) for script in scripts: if (script.text and (script.text.find('viewsingle_param') > -1 or - script.text.find('mpan.viewlist_param') > -1)): + script.text.find('mpan.viewlist_param') > -1)): break else: logger.warn('pcs.parse_share_page: failed to get filelist, %s', url) @@ -164,9 +169,9 @@ def parse_share_page(content): if start == -1 or end == -1: return None else: - json_str = script.text[start+19:end] + json_str = script.text[start + 19:end] else: - json_str = script.text[start+33:end] + json_str = script.text[start + 33:end] try: return json.loads(json.loads(json_str)) except ValueError: @@ -188,6 +193,7 @@ def parse_share_page(content): else: return None + def enable_share(cookie, tokens, fid_list): '''建立新的分享. @@ -199,21 +205,22 @@ def enable_share(cookie, tokens, fid_list): ''' url = ''.join([ const.PAN_URL, - 'share/set?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1&app_id=250528', + 'share/set?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1&app_id=250528', '&bdstoken=', tokens['bdstoken'], ]) data = encoder.encode_uri( - 'fid_list={0}&schannel=0&channel_list=[]'.format(fid_list)) + 'fid_list={0}&schannel=0&channel_list=[]'.format(fid_list)) req = net.urlopen(url, headers={ 'Cookie': cookie.header_output(), 'Content-type': const.CONTENT_FORM_UTF8, - }, data=data.encode()) + }, data=data.encode()) if req: content = req.data return json.loads(content.decode()) else: return None + def disable_share(cookie, tokens, shareid_list): '''取消分享. @@ -221,20 +228,21 @@ def disable_share(cookie, tokens, shareid_list): ''' url = ''.join([ const.PAN_URL, - 'share/cancel?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'share/cancel?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&bdstoken=', tokens['bdstoken'], ]) data = 'shareid_list=' + encoder.encode_uri(json.dumps(shareid_list)) req = net.urlopen(url, headers={ 'Cookie': cookie.header_output(), 'Content-type': const.CONTENT_FORM_UTF8, - }, data=data.encode()) + }, data=data.encode()) if req: content = req.data return json.loads(content.decode()) else: return None + def enable_private_share(cookie, tokens, fid_list): '''建立新的私密分享. @@ -243,9 +251,9 @@ def enable_private_share(cookie, tokens, fid_list): print('enable private share:', fid_list, cookie, tokens) url = ''.join([ const.PAN_URL, - 'share/set?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'share/set?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&bdstoken=', tokens['bdstoken'], - '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + '&channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&appid=250528', ]) print('url:', url) @@ -254,18 +262,19 @@ def enable_private_share(cookie, tokens, fid_list): 'fid_list=[', str(fid_list), ']', '&schannel=4&channel_list=[]', '&pwd=', passwd, - ])) + ])) print('data:', data) req = net.urlopen(url, headers={ 'Cookie': cookie.header_output(), 'Content-type': const.CONTENT_FORM_UTF8, - }, data=data.encode()) + }, data=data.encode()) if req: content = req.data return json.loads(content.decode()), passwd else: return None, passwd + def verify_share_password(uk, shareid, pwd, vcode=''): '''验证共享文件的密码. @@ -276,7 +285,7 @@ def verify_share_password(uk, shareid, pwd, vcode=''): ''' url = ''.join([ const.PAN_URL, - 'share/verify?&clienttype=',const.PC_CLIENT_TYPE,'&web=1&channel=chunlei', + 'share/verify?&clienttype=', const.PC_CLIENT_TYPE, '&web=1&channel=chunlei', '&shareid=', shareid, '&uk=', uk, ]) @@ -293,6 +302,7 @@ def verify_share_password(uk, shareid, pwd, vcode=''): pass # TODO: need verify code return None + def get_share_uk_and_shareid(cookie, url): '''从共享链接中提示uk和shareid. @@ -305,6 +315,7 @@ def get_share_uk_and_shareid(cookie, url): * http://pan.baidu.com/share/link?uk=202032639&shareid=420754 * http://pan.baidu.com/s/1i3iQY48 ''' + def parse_share_uk(content): '''代码片段如下: @@ -352,6 +363,7 @@ def parse_uk_from_url(url): uk, shareid = parse_uk_from_url(url) return False, uk, shareid + def get_share_dirname(url): '''从url中提取出当前的目录''' dirname_match = re.search('(dir|path)=([^&]+)', @@ -361,15 +373,17 @@ def get_share_dirname(url): else: return None + def get_share_url_with_dirname(uk, shareid, dirname): '''得到共享目录的链接''' return ''.join([ - const.PAN_URL, 'wap/link', - '?shareid=', shareid, - '&uk=', uk, - '&dir=', encoder.encode_uri_component(dirname), - '&third=0', - ]) + const.PAN_URL, 'wap/link', + '?shareid=', shareid, + '&uk=', uk, + '&dir=', encoder.encode_uri_component(dirname), + '&third=0', + ]) + def share_transfer(cookie, tokens, shareid, uk, filelist, dest, upload_mode): ''' @@ -381,7 +395,7 @@ def share_transfer(cookie, tokens, shareid, uk, filelist, dest, upload_mode): ondup = const.UPLOAD_ONDUP[upload_mode] url = ''.join([ const.PAN_URL, - 'share/transfer?app_id=250528&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'share/transfer?app_id=250528&channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&bdstoken=', tokens['bdstoken'], '&from=', uk, '&shareid=', shareid, @@ -412,7 +426,7 @@ def list_inbox(cookie, tokens, start=0, limit=20): '&start=', str(start), '&limit=', str(limit), '&_=', util.timestamp(), - '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + '&channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&bdstoken=', tokens['bdstoken'], ]) req = net.urlopen(url, headers={'Cookie': cookie.header_output()}) @@ -422,6 +436,7 @@ def list_inbox(cookie, tokens, start=0, limit=20): else: return None + def list_trash(cookie, tokens, path='/', page=1, num=100): '''获取回收站的信息. @@ -433,7 +448,7 @@ def list_trash(cookie, tokens, path='/', page=1, num=100): ''' url = ''.join([ const.PAN_API_URL, - 'recycle/list?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'recycle/list?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&num=', str(num), '&t=', util.timestamp(), '&dir=', encoder.encode_uri_component(path), @@ -449,6 +464,7 @@ def list_trash(cookie, tokens, path='/', page=1, num=100): else: return None + def restore_trash(cookie, tokens, fidlist): '''从回收站中还原文件/目录. @@ -456,7 +472,7 @@ def restore_trash(cookie, tokens, fidlist): ''' url = ''.join([ const.PAN_API_URL, - 'recycle/restore?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'recycle/restore?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&t=', util.timestamp(), '&bdstoken=', tokens['bdstoken'], ]) @@ -464,13 +480,14 @@ def restore_trash(cookie, tokens, fidlist): req = net.urlopen(url, headers={ 'Cookie': cookie.header_output(), 'Content-type': const.CONTENT_FORM_UTF8, - }, data=data.encode()) + }, data=data.encode()) if req: content = req.data return json.loads(content.decode()) else: return None + def delete_trash(cookie, tokens, fidlist): '''批量将文件从回收站中删除, 这一步不可还原!' @@ -480,38 +497,40 @@ def delete_trash(cookie, tokens, fidlist): ''' url = ''.join([ const.PAN_API_URL, - 'recycle/delete?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'recycle/delete?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&bdstoken=', tokens['bdstoken'], ]) data = 'fidlist=' + encoder.encode_uri_component(json.dumps(fidlist)) req = net.urlopen(url, headers={ 'Cookie': cookie.header_output(), 'Content-type': const.CONTENT_FORM_UTF8, - }, data=data.encode()) + }, data=data.encode()) if req: content = req.data return json.loads(content.decode()) else: return None + def clear_trash(cookie, tokens): '''清空回收站, 将里面的所有文件都删除.''' url = ''.join([ const.PAN_API_URL, - 'recycle/clear?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'recycle/clear?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&t=', util.timestamp(), '&bdstoken=', tokens['bdstoken'], ]) # 使用POST方式发送命令, 但data为空. req = net.urlopen(url, headers={ 'Cookie': cookie.header_output(), - }, data=''.encode()) + }, data=''.encode()) if req: content = req.data return json.loads(content.decode()) else: return None + def list_dir_all(cookie, tokens, path): '''得到一个目录中所有文件的信息, 并返回它的文件列表''' pcs_files = [] @@ -525,13 +544,14 @@ def list_dir_all(cookie, tokens, path): pcs_files.extend(content['list']) page = page + 1 + def list_dir(cookie, tokens, path, page=1, num=100): '''得到一个目录中的所有文件的信息(最多100条记录).''' timestamp = util.timestamp() url = ''.join([ const.PAN_API_URL, 'list?channel=chunlei', - '&clienttype=',const.PC_CLIENT_TYPE, + '&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&num=', str(num), '&t=', timestamp, @@ -552,6 +572,7 @@ def list_dir(cookie, tokens, path, page=1, num=100): else: return None + def mkdir(cookie, tokens, path): '''创建一个目录. @@ -559,8 +580,8 @@ def mkdir(cookie, tokens, path): @return 返回一个dict, 里面包含了fs_id, ctime等信息. ''' url = ''.join([ - const.PAN_API_URL, - 'create?a=commit&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + const.PAN_API_URL, + 'create?a=commit&channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&bdstoken=', tokens['bdstoken'], ]) data = ''.join([ @@ -570,13 +591,14 @@ def mkdir(cookie, tokens, path): req = net.urlopen(url, headers={ 'Cookie': cookie.header_output(), 'Content-type': const.CONTENT_FORM_UTF8, - }, data=data.encode()) + }, data=data.encode()) if req: content = req.data return json.loads(content.decode()) else: return None + def delete_files(cookie, tokens, filelist): '''批量删除文件/目录. @@ -584,20 +606,21 @@ def delete_files(cookie, tokens, filelist): ''' url = ''.join([ const.PAN_API_URL, - 'filemanager?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1&opera=delete', + 'filemanager?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1&opera=delete', '&bdstoken=', tokens['bdstoken'], ]) data = 'filelist=' + encoder.encode_uri_component(json.dumps(filelist)) req = net.urlopen(url, headers={ 'Content-type': const.CONTENT_FORM_UTF8, 'Cookie': cookie.header_output(), - }, data=data.encode()) + }, data=data.encode()) if req: content = req.data return json.loads(content.decode()) else: return None + def rename(cookie, tokens, filelist): '''批量重命名目录/文件. @@ -609,20 +632,21 @@ def rename(cookie, tokens, filelist): ''' url = ''.join([ const.PAN_API_URL, - 'filemanager?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1&opera=rename', + 'filemanager?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1&opera=rename', '&bdstoken=', tokens['bdstoken'], ]) data = 'filelist=' + encoder.encode_uri_component(json.dumps(filelist)) req = net.urlopen(url, headers={ 'Content-type': const.CONTENT_FORM_UTF8, 'Cookie': cookie.header_output(), - }, data=data.encode()) + }, data=data.encode()) if req: content = req.data return json.loads(content.decode()) else: return None + def move(cookie, tokens, filelist): '''移动文件/目录到新的位置. @@ -633,20 +657,21 @@ def move(cookie, tokens, filelist): ''' url = ''.join([ const.PAN_API_URL, - 'filemanager?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1&opera=move', + 'filemanager?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1&opera=move', '&bdstoken=', tokens['bdstoken'], ]) data = 'filelist=' + encoder.encode_uri_component(json.dumps(filelist)) req = net.urlopen(url, headers={ 'Cookie': cookie.header_output(), 'Content-type': const.CONTENT_FORM_UTF8, - }, data=data.encode()) + }, data=data.encode()) if req: content = req.data return json.loads(content.decode()) else: return None + def copy(cookie, tokens, filelist): '''复制文件/目录到新位置. @@ -657,14 +682,14 @@ def copy(cookie, tokens, filelist): ''' url = ''.join([ const.PAN_API_URL, - 'filemanager?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1&opera=copy', + 'filemanager?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1&opera=copy', '&bdstoken=', tokens['bdstoken'], ]) data = 'filelist=' + encoder.encode_uri_component(json.dumps(filelist)) req = net.urlopen(url, headers={ 'Cookie': cookie.header_output(), 'Content-type': const.CONTENT_FORM_UTF8, - }, data=data.encode()) + }, data=data.encode()) if req: content = req.data return json.loads(content.decode()) @@ -687,7 +712,7 @@ def get_category(cookie, tokens, category, page=1): timestamp = util.timestamp() url = ''.join([ const.PAN_API_URL, - 'categorylist?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'categorylist?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&category=', str(category), '&pri=-1&num=100', '&t=', timestamp, @@ -703,6 +728,7 @@ def get_category(cookie, tokens, category, page=1): else: return None + def get_download_link(cookie, tokens, path): '''在下载之前, 要先获取最终的下载链接. @@ -713,7 +739,7 @@ def get_download_link(cookie, tokens, path): ''' metas = get_metas(cookie, tokens, path) if (not metas or metas.get('errno', -1) != 0 or - 'info' not in metas or len(metas['info']) != 1): + 'info' not in metas or len(metas['info']) != 1): logger.error('pcs.get_download_link(): %s' % metas) return None dlink = metas['info'][0]['dlink'] @@ -727,6 +753,7 @@ def get_download_link(cookie, tokens, path): else: return req.getheader('Location', url) + def stream_download(cookie, tokens, path): '''下载流媒体文件. @@ -739,12 +766,13 @@ def stream_download(cookie, tokens, path): '&app_id=250528', ]) req = net.urlopen_without_redirect(url, headers= - {'Cookie': cookie.header_output()}) + {'Cookie': cookie.header_output()}) if req: return req else: return None + def get_streaming_playlist(cookie, path, video_type='M3U8_AUTO_480'): '''获取流媒体(通常是视频)的播放列表. @@ -766,7 +794,7 @@ def get_streaming_playlist(cookie, path, video_type='M3U8_AUTO_480'): return None -#def upload_option(cookie, path): +# def upload_option(cookie, path): # '''上传之前的检查. # # path - 准备在服务器上放到的绝对路径. @@ -814,6 +842,7 @@ def upload(cookie, source_path, path, upload_mode): else: return None + def rapid_upload(cookie, tokens, source_path, path, upload_mode): '''快速上传''' ondup = const.UPLOAD_ONDUP[upload_mode] @@ -841,6 +870,7 @@ def rapid_upload(cookie, tokens, source_path, path, upload_mode): else: return None + def slice_upload(cookie, data): '''分片上传一个大文件 @@ -856,13 +886,14 @@ def slice_upload(cookie, data): ]) fields = [] files = [('file', ' ', data)] - headers = {'Accept': const.ACCEPT_HTML,'Origin': const.PAN_URL} + headers = {'Accept': const.ACCEPT_HTML, 'Origin': const.PAN_URL} req = net.post_multipart(url, headers, fields, files) if req: return json.loads(req.data.decode()) else: return None + def create_superfile(cookie, path, block_list): '''合并slice_upload()中产生的临时文件 @@ -900,7 +931,7 @@ def get_metas(cookie, tokens, filelist, dlink=True): url = ''.join([ const.PAN_API_URL, 'filemetas?channel=chunlei', - '&clienttype=',const.PC_CLIENT_TYPE, + '&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&bdstoken=', tokens['bdstoken'], ]) @@ -913,13 +944,14 @@ def get_metas(cookie, tokens, filelist, dlink=True): req = net.urlopen(url, headers={ 'Cookie': cookie.sub_output('BDUSS'), 'Content-type': const.CONTENT_FORM, - }, data=data.encode()) + }, data=data.encode()) if req: content = req.data return json.loads(content.decode()) else: return None + def search(cookie, tokens, key, path='/'): '''搜索全部文件, 根据文件名. @@ -929,7 +961,7 @@ def search(cookie, tokens, key, path='/'): url = ''.join([ const.PAN_API_URL, 'search?channel=chunlei', - '&clienttype=',const.PC_CLIENT_TYPE, + '&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&dir=', path, '&key=', key, @@ -944,6 +976,7 @@ def search(cookie, tokens, key, path='/'): else: return None + def cloud_add_link_task(cookie, tokens, source_url, save_path, vcode='', vcode_input=''): '''新建离线下载任务. @@ -955,7 +988,7 @@ def cloud_add_link_task(cookie, tokens, source_url, save_path, url = ''.join([ const.PAN_URL, 'rest/2.0/services/cloud_dl?channel=chunlei', - '&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + '&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&bdstoken=', tokens['bdstoken'], ]) type_ = '' @@ -983,6 +1016,7 @@ def cloud_add_link_task(cookie, tokens, source_url, save_path, else: return None + def cloud_add_bt_task(cookie, tokens, source_url, save_path, selected_idx, file_sha1='', vcode='', vcode_input=''): '''新建一个BT类的离线下载任务, 包括magent磁链. @@ -998,7 +1032,7 @@ def cloud_add_bt_task(cookie, tokens, source_url, save_path, selected_idx, url = ''.join([ const.PAN_URL, 'rest/2.0/services/cloud_dl?channel=chunlei', - '&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + '&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&bdstoken=', tokens['bdstoken'], ]) type_ = '2' @@ -1032,6 +1066,7 @@ def cloud_add_bt_task(cookie, tokens, source_url, save_path, selected_idx, else: return None + def cloud_query_sinfo(cookie, tokens, source_path): '''获取网盘中种子的信息, 比如里面的文件名, 文件大小等. @@ -1039,7 +1074,7 @@ def cloud_query_sinfo(cookie, tokens, source_path): ''' url = ''.join([ const.PAN_URL, - 'rest/2.0/services/cloud_dl?channel=chunlei','&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'rest/2.0/services/cloud_dl?channel=chunlei', '&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&method=query_sinfo&app_id=250528', '&bdstoken=', tokens['bdstoken'], '&source_path=', encoder.encode_uri_component(source_path), @@ -1053,6 +1088,7 @@ def cloud_query_sinfo(cookie, tokens, source_path): else: return None + def cloud_query_magnetinfo(cookie, tokens, source_url, save_path): '''获取磁链的信息. @@ -1064,7 +1100,7 @@ def cloud_query_magnetinfo(cookie, tokens, source_url, save_path): ''' url = ''.join([ const.PAN_URL, - 'rest/2.0/services/cloud_dl?channel=chunlei','&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'rest/2.0/services/cloud_dl?channel=chunlei', '&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&bdstoken=', tokens['bdstoken'], ]) data = ''.join([ @@ -1081,6 +1117,7 @@ def cloud_query_magnetinfo(cookie, tokens, source_url, save_path): else: return None + def cloud_list_task(cookie, tokens, start=0): '''获取当前离线下载的任务信息 @@ -1088,7 +1125,7 @@ def cloud_list_task(cookie, tokens, start=0): ''' url = ''.join([ const.PAN_URL, - 'rest/2.0/services/cloud_dl?channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + 'rest/2.0/services/cloud_dl?channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&bdstoken=', tokens['bdstoken'], '&need_task_info=1&status=255', '&start=', str(start), @@ -1102,6 +1139,7 @@ def cloud_list_task(cookie, tokens, start=0): else: return None + def cloud_query_task(cookie, tokens, task_ids): '''查询离线下载任务的信息, 比如进度, 是否完成下载等. @@ -1116,7 +1154,7 @@ def cloud_query_task(cookie, tokens, task_ids): '&bdstoken=', tokens['bdstoken'], '&task_ids=', ','.join(task_ids), '&t=', util.timestamp(), - '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + '&channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', ]) req = net.urlopen(url, headers={'Cookie': cookie.header_output()}) if req: @@ -1125,6 +1163,7 @@ def cloud_query_task(cookie, tokens, task_ids): else: return None + def cloud_cancel_task(cookie, tokens, task_id): '''取消离线下载任务. @@ -1138,7 +1177,7 @@ def cloud_cancel_task(cookie, tokens, task_id): '&task_id=', str(task_id), '&method=cancel_task&app_id=250528', '&t=', util.timestamp(), - '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + '&channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', ]) req = net.urlopen(url, headers={'Cookie': cookie.header_output()}) if req: @@ -1147,6 +1186,7 @@ def cloud_cancel_task(cookie, tokens, task_id): else: return None + def cloud_delete_task(cookie, tokens, task_id): '''删除一个离线下载任务, 不管这个任务是否已完成下载. @@ -1159,7 +1199,7 @@ def cloud_delete_task(cookie, tokens, task_id): '&task_id=', str(task_id), '&method=delete_task&app_id=250528', '&t=', util.timestamp(), - '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + '&channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', ]) req = net.urlopen(url, headers={'Cookie': cookie.header_output()}) if req: @@ -1168,12 +1208,13 @@ def cloud_delete_task(cookie, tokens, task_id): else: return None + def cloud_clear_task(cookie, tokens): '''清空离线下载的历史(已经完成或者取消的).''' url = ''.join([ const.PAN_URL, 'rest/2.0/services/cloud_dl?method=clear_task&app_id=250528', - '&channel=chunlei&clienttype=',const.PC_CLIENT_TYPE,'&web=1', + '&channel=chunlei&clienttype=', const.PC_CLIENT_TYPE, '&web=1', '&t=', util.timestamp(), '&bdstoken=', tokens['bdstoken'], ]) @@ -1183,4 +1224,3 @@ def cloud_clear_task(cookie, tokens): return json.loads(content.decode()) else: return None - From 39545aed3e67c04a2f4b5984237caeee1502e444 Mon Sep 17 00:00:00 2001 From: Jackie Wu Date: Wed, 10 May 2017 10:44:33 +0800 Subject: [PATCH 23/32] =?UTF-8?q?=E6=9B=B4=E6=AD=A3=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E2=80=9C=E5=88=A0=E9=99=A4=E9=80=89=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E4=BB=BB=E5=8A=A1=E2=80=9D=E7=9A=84=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bcloud/UploadPage.py | 4 ++-- po/zh_CN.po | 2 +- po/zh_TW.po | 2 +- share/locale/zh_CN/LC_MESSAGES/bcloud.mo | Bin 12068 -> 12065 bytes share/locale/zh_TW/LC_MESSAGES/bcloud.mo | Bin 12075 -> 12072 bytes 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bcloud/UploadPage.py b/bcloud/UploadPage.py index 4171d8e..198fd36 100644 --- a/bcloud/UploadPage.py +++ b/bcloud/UploadPage.py @@ -543,7 +543,7 @@ def pause_tasks(self): self.pause_task(row, scan=False) def pause_task(self, row, scan=True): - '''暂停下载任务''' + '''暂停上传任务''' if row[STATE_COL] == State.UPLOADING: self.remove_worker(row[FID_COL], stop=False) if row[STATE_COL] in (State.UPLOADING, State.WAITING): @@ -554,7 +554,7 @@ def pause_task(self, row, scan=True): self.scan_tasks() def remove_task(self, row, scan=True): - '''删除下载任务''' + '''删除上传任务''' if row[STATE_COL] == State.UPLOADING: self.remove_worker(row[FID_COL], stop=True) self.remove_task_db(row[FID_COL]) diff --git a/po/zh_CN.po b/po/zh_CN.po index 255f5c8..84562a7 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -149,7 +149,7 @@ msgstr "打开所在目录" #: ../bcloud/CloudPage.py:78 ../bcloud/DownloadPage.py:144 #: ../bcloud/UploadPage.py:131 msgid "Remove selected tasks" -msgstr "删除选中的的任务" +msgstr "删除选中的任务" #: ../bcloud/CloudPage.py:86 ../bcloud/CloudPage.py:119 msgid "Remove completed cloud tasks" diff --git a/po/zh_TW.po b/po/zh_TW.po index 23f3498..1d85ddf 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -149,7 +149,7 @@ msgstr "打開所在目錄" #: ../bcloud/CloudPage.py:78 ../bcloud/DownloadPage.py:144 #: ../bcloud/UploadPage.py:131 msgid "Remove selected tasks" -msgstr "刪除選中的的任務" +msgstr "刪除選中的任務" #: ../bcloud/CloudPage.py:86 ../bcloud/CloudPage.py:119 msgid "Remove completed cloud tasks" diff --git a/share/locale/zh_CN/LC_MESSAGES/bcloud.mo b/share/locale/zh_CN/LC_MESSAGES/bcloud.mo index 9d51b2f42bfdd9259b2b6745669c44884734b3b6..e459e1a37d23900712b4c4fd606fb2e03e817bbe 100644 GIT binary patch delta 529 zcmXZXKP*F06vy!++Q&_rxT28qEN4F+LCMG!G`k~9nw zlc9sbVl#j*VChk95Mb+IWN!a2<0qURfN(r(xy$gr`4deO1lKn=RXK77IuUr}`*n8hE@Go$T6 z1ynxiRZZ4-m)zqlwy=u9nAr?2p!WAs^>ysT3)I0^s6h`{ cz-P?k7e<&JH|xMtKGii3!#Lk;m6p5y02akJ>Hq)$ delta 529 zcmXZXFGxdC6vy%7AB4BP;q%Y@Gi8Ehust{OMwrDBR9y*`H|cPxb{5L^Dhp+cSZJ(#grsIc zc1kJAQnnV>N-V|ym}hbOz2|w)x$k?s=hf5d)j=ZeH?y0(SsI_^8wS*0*p4j)vlMn< z0z*vVDEeFpy>C`l(B~t$sJtdul&=*m{vX^>u%(7QS(isR#|tmeFYHp~a}b;|2o8d)7Ab;GtwpMI z5y7n>I0%m7>fkJhj{dK?A^hHZa+iD44!hx9D;X_{$U|Oa7T?TIbg6%F91{hR6grqh z4;{>*&TXRh?U+95d|-x_H_Uy@4+|0v2ahc{wT27x%538{AMBxC Date: Fri, 26 May 2017 21:27:59 +0800 Subject: [PATCH 24/32] Refresh translations --- po/bcloud.pot | 256 +++++++++++++++++++++++++++++--------------------- po/zh_CN.po | 256 +++++++++++++++++++++++++++++--------------------- po/zh_TW.po | 256 +++++++++++++++++++++++++++++--------------------- 3 files changed, 452 insertions(+), 316 deletions(-) diff --git a/po/bcloud.pot b/po/bcloud.pot index c1ab41a..5e4bf9c 100644 --- a/po/bcloud.pot +++ b/po/bcloud.pot @@ -8,48 +8,48 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-16 01:46+0800\n" +"POT-Creation-Date: 2017-05-26 21:27+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../bcloud/App.py:100 ../bcloud/PreferencesDialog.py:18 +#: ../bcloud/App.py:104 ../bcloud/PreferencesDialog.py:18 msgid "Preferences" msgstr "" -#: ../bcloud/App.py:101 +#: ../bcloud/App.py:105 msgid "Sign out" msgstr "" -#: ../bcloud/App.py:102 +#: ../bcloud/App.py:106 msgid "About" msgstr "" -#: ../bcloud/App.py:103 ../bcloud/App.py:443 +#: ../bcloud/App.py:107 ../bcloud/App.py:450 msgid "Quit" msgstr "" -#: ../bcloud/App.py:155 +#: ../bcloud/App.py:160 msgid "Unknown" msgstr "" -#: ../bcloud/App.py:421 +#: ../bcloud/App.py:428 msgid "Show App" msgstr "" -#: ../bcloud/App.py:429 +#: ../bcloud/App.py:436 msgid "Pause Upload Tasks" msgstr "" -#: ../bcloud/App.py:435 +#: ../bcloud/App.py:442 msgid "Pause Download Tasks" msgstr "" -#: ../bcloud/App.py:489 +#: ../bcloud/App.py:496 #, python-brace-format msgid "{0} copied to clipboard" msgstr "" @@ -59,15 +59,15 @@ msgid "Select All" msgstr "" #: ../bcloud/BTBrowserDialog.py:64 ../bcloud/CloudPage.py:150 -#: ../bcloud/DownloadPage.py:223 ../bcloud/IconWindow.py:688 +#: ../bcloud/DownloadPage.py:246 ../bcloud/IconWindow.py:712 #: ../bcloud/SharePage.py:162 ../bcloud/TrashPage.py:141 #: ../bcloud/UploadPage.py:205 msgid "Name" msgstr "" #: ../bcloud/BTBrowserDialog.py:68 ../bcloud/CloudPage.py:157 -#: ../bcloud/DownloadPage.py:237 ../bcloud/IconWindow.py:704 -#: ../bcloud/PropertiesDialog.py:55 ../bcloud/SharePage.py:174 +#: ../bcloud/DownloadPage.py:260 ../bcloud/IconWindow.py:728 +#: ../bcloud/PropertiesDialog.py:58 ../bcloud/SharePage.py:174 #: ../bcloud/TrashPage.py:156 ../bcloud/UploadPage.py:219 msgid "Size" msgstr "" @@ -141,12 +141,12 @@ msgstr "" msgid "Create new cloud task" msgstr "" -#: ../bcloud/CloudPage.py:63 ../bcloud/DownloadPage.py:118 +#: ../bcloud/CloudPage.py:63 ../bcloud/DownloadPage.py:141 #: ../bcloud/UploadPage.py:92 msgid "Open target directory" msgstr "" -#: ../bcloud/CloudPage.py:78 ../bcloud/DownloadPage.py:144 +#: ../bcloud/CloudPage.py:78 ../bcloud/DownloadPage.py:167 #: ../bcloud/UploadPage.py:131 msgid "Remove selected tasks" msgstr "" @@ -159,7 +159,7 @@ msgstr "" msgid "New Link Task" msgstr "" -#: ../bcloud/CloudPage.py:114 ../bcloud/DownloadPage.py:171 +#: ../bcloud/CloudPage.py:114 ../bcloud/DownloadPage.py:194 #: ../bcloud/UploadPage.py:168 msgid "Open Directory" msgstr "" @@ -169,12 +169,12 @@ msgid "Clear" msgstr "" #: ../bcloud/CloudPage.py:123 ../bcloud/CloudPage.py:124 -#: ../bcloud/DownloadPage.py:192 ../bcloud/DownloadPage.py:792 +#: ../bcloud/DownloadPage.py:215 ../bcloud/DownloadPage.py:818 #: ../bcloud/TrashPage.py:66 ../bcloud/UploadPage.py:180 msgid "Remove" msgstr "" -#: ../bcloud/CloudPage.py:163 ../bcloud/DownloadPage.py:230 +#: ../bcloud/CloudPage.py:163 ../bcloud/DownloadPage.py:253 #: ../bcloud/UploadPage.py:212 msgid "Progress" msgstr "" @@ -213,7 +213,7 @@ msgstr "" msgid "Support http/https/ftp/thunder/qqdl/flashget/eMule/Magnet format" msgstr "" -#: ../bcloud/Config.py:55 +#: ../bcloud/Config.py:57 msgid "Baidu Pan client for GNU/Linux desktop users." msgstr "" @@ -233,93 +233,105 @@ msgstr "" msgid "ERROR" msgstr "" -#: ../bcloud/DownloadPage.py:68 ../bcloud/IconWindow.py:346 -#: ../bcloud/PreferencesDialog.py:93 +#: ../bcloud/DownloadPage.py:49 +msgid "Do you want to remove unfinished tasks?" +msgstr "" + +#: ../bcloud/DownloadPage.py:51 +msgid "Do you want to remove unfinished task?" +msgstr "" + +#: ../bcloud/DownloadPage.py:57 +msgid "Do not ask again" +msgstr "" + +#: ../bcloud/DownloadPage.py:91 ../bcloud/IconWindow.py:346 +#: ../bcloud/PreferencesDialog.py:110 msgid "Download" msgstr "" -#: ../bcloud/DownloadPage.py:70 +#: ../bcloud/DownloadPage.py:93 msgid "Downloading files" msgstr "" -#: ../bcloud/DownloadPage.py:101 ../bcloud/DownloadPage.py:163 +#: ../bcloud/DownloadPage.py:124 ../bcloud/DownloadPage.py:186 #: ../bcloud/UploadPage.py:75 ../bcloud/UploadPage.py:147 msgid "Start" msgstr "" -#: ../bcloud/DownloadPage.py:110 ../bcloud/DownloadPage.py:167 +#: ../bcloud/DownloadPage.py:133 ../bcloud/DownloadPage.py:190 #: ../bcloud/UploadPage.py:84 ../bcloud/UploadPage.py:151 msgid "Pause" msgstr "" -#: ../bcloud/DownloadPage.py:128 ../bcloud/DownloadPage.py:180 +#: ../bcloud/DownloadPage.py:151 ../bcloud/DownloadPage.py:203 msgid "Shutdown system after all tasks have finished" msgstr "" -#: ../bcloud/DownloadPage.py:152 ../bcloud/DownloadPage.py:187 +#: ../bcloud/DownloadPage.py:175 ../bcloud/DownloadPage.py:210 #: ../bcloud/UploadPage.py:139 ../bcloud/UploadPage.py:175 msgid "Remove completed tasks" msgstr "" -#: ../bcloud/DownloadPage.py:178 +#: ../bcloud/DownloadPage.py:201 msgid "Shutdown" msgstr "" -#: ../bcloud/DownloadPage.py:243 ../bcloud/UploadPage.py:225 +#: ../bcloud/DownloadPage.py:266 ../bcloud/UploadPage.py:225 msgid "State" msgstr "" -#: ../bcloud/DownloadPage.py:390 +#: ../bcloud/DownloadPage.py:413 msgid "Failed to scan folder to download" msgstr "" -#: ../bcloud/DownloadPage.py:392 +#: ../bcloud/DownloadPage.py:415 #, python-brace-format msgid "Please download {0} again" msgstr "" -#: ../bcloud/DownloadPage.py:415 +#: ../bcloud/DownloadPage.py:438 #, python-brace-format msgid "Task exists: {0}" msgstr "" -#: ../bcloud/DownloadPage.py:425 ../bcloud/UploadPage.py:495 +#: ../bcloud/DownloadPage.py:450 ../bcloud/UploadPage.py:495 #, python-brace-format msgid "" "From {0}\n" "To {1}" msgstr "" -#: ../bcloud/DownloadPage.py:509 +#: ../bcloud/DownloadPage.py:534 #, python-brace-format msgid "{0} downloaded" msgstr "" -#: ../bcloud/DownloadPage.py:532 +#: ../bcloud/DownloadPage.py:557 #, python-brace-format msgid "Error occurs will downloading {0}" msgstr "" -#: ../bcloud/DownloadPage.py:538 +#: ../bcloud/DownloadPage.py:563 #, python-brace-format msgid "Disk Error: failed to read/write {0}" msgstr "" -#: ../bcloud/DownloadPage.py:757 ../bcloud/DownloadPage.py:782 +#: ../bcloud/DownloadPage.py:783 ../bcloud/DownloadPage.py:808 #: ../bcloud/IconWindow.py:301 ../bcloud/IconWindow.py:328 #, python-brace-format msgid "Open With {0}" msgstr "" -#: ../bcloud/DownloadPage.py:760 ../bcloud/IconWindow.py:305 +#: ../bcloud/DownloadPage.py:786 ../bcloud/IconWindow.py:305 msgid "Open With" msgstr "" -#: ../bcloud/DownloadPage.py:772 ../bcloud/IconWindow.py:317 +#: ../bcloud/DownloadPage.py:798 ../bcloud/IconWindow.py:317 msgid "Other Application..." msgstr "" -#: ../bcloud/DownloadPage.py:785 ../bcloud/IconWindow.py:332 +#: ../bcloud/DownloadPage.py:811 ../bcloud/IconWindow.py:332 msgid "Open With Other Application..." msgstr "" @@ -355,7 +367,7 @@ msgstr "" msgid "Search documents and folders by name" msgstr "" -#: ../bcloud/IconWindow.py:176 ../bcloud/IconWindow.py:753 +#: ../bcloud/IconWindow.py:176 ../bcloud/IconWindow.py:777 msgid "Error: Move folder to itself!" msgstr "" @@ -372,7 +384,7 @@ msgstr "" msgid "Upload Folders..." msgstr "" -#: ../bcloud/IconWindow.py:239 ../bcloud/IconWindow.py:376 +#: ../bcloud/IconWindow.py:239 ../bcloud/IconWindow.py:379 msgid "Properties" msgstr "" @@ -396,39 +408,47 @@ msgstr "" msgid "Copy Link" msgstr "" -#: ../bcloud/IconWindow.py:349 ../bcloud/SharePage.py:59 +#: ../bcloud/IconWindow.py:349 +msgid "Download to..." +msgstr "" + +#: ../bcloud/IconWindow.py:352 ../bcloud/SharePage.py:59 msgid "Share" msgstr "" -#: ../bcloud/IconWindow.py:352 +#: ../bcloud/IconWindow.py:355 msgid "Private Share" msgstr "" -#: ../bcloud/IconWindow.py:358 ../bcloud/IconWindow.py:574 +#: ../bcloud/IconWindow.py:361 ../bcloud/IconWindow.py:598 msgid "Move To..." msgstr "" -#: ../bcloud/IconWindow.py:361 ../bcloud/IconWindow.py:598 +#: ../bcloud/IconWindow.py:364 ../bcloud/IconWindow.py:622 msgid "Copy To..." msgstr "" -#: ../bcloud/IconWindow.py:364 +#: ../bcloud/IconWindow.py:367 msgid "Rename..." msgstr "" -#: ../bcloud/IconWindow.py:370 +#: ../bcloud/IconWindow.py:373 msgid "Move to Trash" msgstr "" -#: ../bcloud/IconWindow.py:507 +#: ../bcloud/IconWindow.py:510 msgid "Failed to copy link" msgstr "" -#: ../bcloud/IconWindow.py:533 ../bcloud/IconWindow.py:553 +#: ../bcloud/IconWindow.py:537 +msgid "Save to..." +msgstr "" + +#: ../bcloud/IconWindow.py:557 ../bcloud/IconWindow.py:577 msgid "Failed to share selected files" msgstr "" -#: ../bcloud/IconWindow.py:711 ../bcloud/SharePage.py:180 +#: ../bcloud/IconWindow.py:735 ../bcloud/SharePage.py:180 msgid "Modified" msgstr "" @@ -463,131 +483,139 @@ msgid "Use Status Icon:" msgstr "" #: ../bcloud/PreferencesDialog.py:77 +msgid "Startup minimized:" +msgstr "" + +#: ../bcloud/PreferencesDialog.py:94 msgid "Display Avatar:" msgstr "" -#: ../bcloud/PreferencesDialog.py:95 +#: ../bcloud/PreferencesDialog.py:112 msgid "Save To:" msgstr "" -#: ../bcloud/PreferencesDialog.py:104 +#: ../bcloud/PreferencesDialog.py:121 msgid "Concurrent downloads:" msgstr "" -#: ../bcloud/PreferencesDialog.py:114 +#: ../bcloud/PreferencesDialog.py:131 msgid "Per task:" msgstr "" -#: ../bcloud/PreferencesDialog.py:122 +#: ../bcloud/PreferencesDialog.py:139 msgid "connections" msgstr "" -#: ../bcloud/PreferencesDialog.py:126 +#: ../bcloud/PreferencesDialog.py:143 msgid "Retries each:" msgstr "" -#: ../bcloud/PreferencesDialog.py:133 +#: ../bcloud/PreferencesDialog.py:150 msgid "0: disable retries" msgstr "" -#: ../bcloud/PreferencesDialog.py:135 +#: ../bcloud/PreferencesDialog.py:152 msgid "minutes" msgstr "" -#: ../bcloud/PreferencesDialog.py:139 +#: ../bcloud/PreferencesDialog.py:156 msgid "Download timeout:" msgstr "" -#: ../bcloud/PreferencesDialog.py:148 +#: ../bcloud/PreferencesDialog.py:165 msgid "seconds" msgstr "" -#: ../bcloud/PreferencesDialog.py:152 +#: ../bcloud/PreferencesDialog.py:169 msgid "File exists while downloading:" msgstr "" -#: ../bcloud/PreferencesDialog.py:156 ../bcloud/PreferencesDialog.py:200 +#: ../bcloud/PreferencesDialog.py:173 ../bcloud/PreferencesDialog.py:228 msgid "Do Nothing" msgstr "" -#: ../bcloud/PreferencesDialog.py:157 ../bcloud/PreferencesDialog.py:201 +#: ../bcloud/PreferencesDialog.py:174 ../bcloud/PreferencesDialog.py:229 msgid "Overwrite" msgstr "" -#: ../bcloud/PreferencesDialog.py:158 ../bcloud/PreferencesDialog.py:202 +#: ../bcloud/PreferencesDialog.py:175 ../bcloud/PreferencesDialog.py:230 msgid "Rename Automatically" msgstr "" -#: ../bcloud/PreferencesDialog.py:162 +#: ../bcloud/PreferencesDialog.py:179 msgid "What to do when downloading a file which already exists on local disk" msgstr "" -#: ../bcloud/PreferencesDialog.py:172 ../bcloud/UploadPage.py:48 +#: ../bcloud/PreferencesDialog.py:183 +msgid "Ask me when deleting unfinished tasks:" +msgstr "" + +#: ../bcloud/PreferencesDialog.py:200 ../bcloud/UploadPage.py:48 msgid "Upload" msgstr "" -#: ../bcloud/PreferencesDialog.py:174 +#: ../bcloud/PreferencesDialog.py:202 msgid "Concurrent uploads:" msgstr "" -#: ../bcloud/PreferencesDialog.py:184 +#: ../bcloud/PreferencesDialog.py:212 msgid "Upload hidden files:" msgstr "" -#: ../bcloud/PreferencesDialog.py:190 +#: ../bcloud/PreferencesDialog.py:218 msgid "Also upload hidden files and folders" msgstr "" -#: ../bcloud/PreferencesDialog.py:196 +#: ../bcloud/PreferencesDialog.py:224 msgid "File exists while uploading:" msgstr "" -#: ../bcloud/PreferencesDialog.py:205 +#: ../bcloud/PreferencesDialog.py:233 msgid "What to do when uploading a file which already exists on server" msgstr "" -#: ../bcloud/PreferencesDialog.py:209 +#: ../bcloud/PreferencesDialog.py:237 msgid "Enable Sync:" msgstr "" -#: ../bcloud/PreferencesDialog.py:217 +#: ../bcloud/PreferencesDialog.py:245 msgid "Sync Dir:" msgstr "" -#: ../bcloud/PreferencesDialog.py:226 +#: ../bcloud/PreferencesDialog.py:254 msgid "Dest Sync Dir:" msgstr "" -#: ../bcloud/PropertiesDialog.py:26 ../bcloud/PropertiesDialog.py:95 +#: ../bcloud/PropertiesDialog.py:26 ../bcloud/PropertiesDialog.py:98 msgid " Properties" msgstr "" -#: ../bcloud/PropertiesDialog.py:42 ../bcloud/PropertiesDialog.py:108 +#: ../bcloud/PropertiesDialog.py:45 ../bcloud/PropertiesDialog.py:114 msgid "Name:" msgstr "" -#: ../bcloud/PropertiesDialog.py:47 ../bcloud/PropertiesDialog.py:113 +#: ../bcloud/PropertiesDialog.py:50 ../bcloud/PropertiesDialog.py:119 msgid "Location:" msgstr "" -#: ../bcloud/PropertiesDialog.py:60 ../bcloud/PropertiesDialog.py:62 +#: ../bcloud/PropertiesDialog.py:63 ../bcloud/PropertiesDialog.py:65 msgid " bytes" msgstr "" -#: ../bcloud/PropertiesDialog.py:75 +#: ../bcloud/PropertiesDialog.py:78 msgid "Created:" msgstr "" -#: ../bcloud/PropertiesDialog.py:80 +#: ../bcloud/PropertiesDialog.py:83 msgid "Modified:" msgstr "" -#: ../bcloud/PropertiesDialog.py:125 +#: ../bcloud/PropertiesDialog.py:131 #, python-brace-format msgid "{0} folders, {1} files" msgstr "" -#: ../bcloud/PropertiesDialog.py:126 +#: ../bcloud/PropertiesDialog.py:132 msgid "Contents:" msgstr "" @@ -678,87 +706,103 @@ msgstr "" msgid "Remember Password" msgstr "" -#: ../bcloud/SigninDialog.py:165 +#: ../bcloud/SigninDialog.py:168 msgid "Signin Automatically" msgstr "" -#: ../bcloud/SigninDialog.py:171 ../bcloud/SigninDialog.py:240 +#: ../bcloud/SigninDialog.py:177 ../bcloud/SigninDialog.py:246 msgid "Sign in" msgstr "" -#: ../bcloud/SigninDialog.py:181 +#: ../bcloud/SigninDialog.py:187 msgid "Failed to sign in, please try again." msgstr "" -#: ../bcloud/SigninDialog.py:265 ../bcloud/SigninDialog.py:274 +#: ../bcloud/SigninDialog.py:271 ../bcloud/SigninDialog.py:280 msgid "In process..." msgstr "" -#: ../bcloud/SigninDialog.py:283 +#: ../bcloud/SigninDialog.py:289 msgid "Failed to get bdstoken!" msgstr "" -#: ../bcloud/SigninDialog.py:295 +#: ../bcloud/SigninDialog.py:301 msgid "Login failed, please try again" msgstr "" -#: ../bcloud/SigninDialog.py:300 ../bcloud/SigninDialog.py:320 +#: ../bcloud/SigninDialog.py:306 ../bcloud/SigninDialog.py:322 msgid "Get bdstoken..." msgstr "" -#: ../bcloud/SigninDialog.py:317 ../bcloud/SigninDialog.py:381 -msgid "Please input verification code!" -msgstr "" - -#: ../bcloud/SigninDialog.py:329 +#: ../bcloud/SigninDialog.py:331 msgid "Password error, please try again" msgstr "" -#: ../bcloud/SigninDialog.py:333 +#: ../bcloud/SigninDialog.py:335 msgid "Verfication code error, please try again" msgstr "" -#: ../bcloud/SigninDialog.py:339 +#: ../bcloud/SigninDialog.py:341 msgid "Does not support SMS/Email verification!" msgstr "" -#: ../bcloud/SigninDialog.py:343 +#: ../bcloud/SigninDialog.py:347 +msgid "NET:登录失败,请在弹出的窗口操作,或重新登录" +msgstr "" + +#: ../bcloud/SigninDialog.py:352 +msgid "NET:近期登录次数过多, 请先通过 passport.baidu.com 解除锁定" +msgstr "" + +#: ../bcloud/SigninDialog.py:357 +msgid "NET:登录过于频繁,请24小时后再试" +msgstr "" + +#: ../bcloud/SigninDialog.py:362 +msgid "NET:账号异常,请在当前网络环境下在百度网页端正常登录一次" +msgstr "" + +#: ../bcloud/SigninDialog.py:366 msgid "Unknown error, please try again" msgstr "" -#: ../bcloud/SigninDialog.py:350 +#: ../bcloud/SigninDialog.py:373 msgid "Failed to request public key, please try again" msgstr "" -#: ../bcloud/SigninDialog.py:365 +#: ../bcloud/SigninDialog.py:388 msgid "Failed to check login, please try again" msgstr "" -#: ../bcloud/SigninDialog.py:394 +#: ../bcloud/SigninDialog.py:405 +msgid "Please input verification code!" +msgstr "" + +#: ../bcloud/SigninDialog.py:418 msgid "Failed to get UBI, please try again." msgstr "" -#: ../bcloud/SigninDialog.py:397 +#: ../bcloud/SigninDialog.py:421 msgid "Check login" msgstr "" -#: ../bcloud/SigninDialog.py:405 +#: ../bcloud/SigninDialog.py:429 msgid "Failed to get token, please try again." msgstr "" -#: ../bcloud/SigninDialog.py:412 +#: ../bcloud/SigninDialog.py:436 msgid "Get UBI..." msgstr "" -#: ../bcloud/SigninDialog.py:421 +#: ../bcloud/SigninDialog.py:445 msgid "Failed to get BAIDUID cookie, please try again." msgstr "" -#: ../bcloud/SigninDialog.py:424 +#: ../bcloud/SigninDialog.py:448 msgid "Get TOKEN..." msgstr "" -#: ../bcloud/SigninDialog.py:442 +#: ../bcloud/SigninDialog.py:465 msgid "Get BAIDUID..." msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po index 84562a7..9d044c2 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-16 01:46+0800\n" +"POT-Creation-Date: 2017-05-26 21:27+0800\n" "PO-Revision-Date: 2014-10-21 17:14+0800\n" "Last-Translator: CzBiX \n" "Language-Team: Chinese (simplified)\n" @@ -17,39 +17,39 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.4\n" -#: ../bcloud/App.py:100 ../bcloud/PreferencesDialog.py:18 +#: ../bcloud/App.py:104 ../bcloud/PreferencesDialog.py:18 msgid "Preferences" msgstr "首选项" -#: ../bcloud/App.py:101 +#: ../bcloud/App.py:105 msgid "Sign out" msgstr "注销" -#: ../bcloud/App.py:102 +#: ../bcloud/App.py:106 msgid "About" msgstr "关于" -#: ../bcloud/App.py:103 ../bcloud/App.py:443 +#: ../bcloud/App.py:107 ../bcloud/App.py:450 msgid "Quit" msgstr "退出" -#: ../bcloud/App.py:155 +#: ../bcloud/App.py:160 msgid "Unknown" msgstr "未知" -#: ../bcloud/App.py:421 +#: ../bcloud/App.py:428 msgid "Show App" msgstr "显示程序" -#: ../bcloud/App.py:429 +#: ../bcloud/App.py:436 msgid "Pause Upload Tasks" msgstr "暂停所有上传任务" -#: ../bcloud/App.py:435 +#: ../bcloud/App.py:442 msgid "Pause Download Tasks" msgstr "暂停所有下载任务" -#: ../bcloud/App.py:489 +#: ../bcloud/App.py:496 #, python-brace-format msgid "{0} copied to clipboard" msgstr "{0} 已被复制到剪贴板" @@ -59,15 +59,15 @@ msgid "Select All" msgstr "全选" #: ../bcloud/BTBrowserDialog.py:64 ../bcloud/CloudPage.py:150 -#: ../bcloud/DownloadPage.py:223 ../bcloud/IconWindow.py:688 +#: ../bcloud/DownloadPage.py:246 ../bcloud/IconWindow.py:712 #: ../bcloud/SharePage.py:162 ../bcloud/TrashPage.py:141 #: ../bcloud/UploadPage.py:205 msgid "Name" msgstr "文件名" #: ../bcloud/BTBrowserDialog.py:68 ../bcloud/CloudPage.py:157 -#: ../bcloud/DownloadPage.py:237 ../bcloud/IconWindow.py:704 -#: ../bcloud/PropertiesDialog.py:55 ../bcloud/SharePage.py:174 +#: ../bcloud/DownloadPage.py:260 ../bcloud/IconWindow.py:728 +#: ../bcloud/PropertiesDialog.py:58 ../bcloud/SharePage.py:174 #: ../bcloud/TrashPage.py:156 ../bcloud/UploadPage.py:219 msgid "Size" msgstr "大小" @@ -141,12 +141,12 @@ msgstr "离线下载" msgid "Create new cloud task" msgstr "新建离线下载" -#: ../bcloud/CloudPage.py:63 ../bcloud/DownloadPage.py:118 +#: ../bcloud/CloudPage.py:63 ../bcloud/DownloadPage.py:141 #: ../bcloud/UploadPage.py:92 msgid "Open target directory" msgstr "打开所在目录" -#: ../bcloud/CloudPage.py:78 ../bcloud/DownloadPage.py:144 +#: ../bcloud/CloudPage.py:78 ../bcloud/DownloadPage.py:167 #: ../bcloud/UploadPage.py:131 msgid "Remove selected tasks" msgstr "删除选中的任务" @@ -159,7 +159,7 @@ msgstr "删除已完成的离线任务" msgid "New Link Task" msgstr "新建链接任务" -#: ../bcloud/CloudPage.py:114 ../bcloud/DownloadPage.py:171 +#: ../bcloud/CloudPage.py:114 ../bcloud/DownloadPage.py:194 #: ../bcloud/UploadPage.py:168 msgid "Open Directory" msgstr "打开所在目录" @@ -169,12 +169,12 @@ msgid "Clear" msgstr "清空" #: ../bcloud/CloudPage.py:123 ../bcloud/CloudPage.py:124 -#: ../bcloud/DownloadPage.py:192 ../bcloud/DownloadPage.py:792 +#: ../bcloud/DownloadPage.py:215 ../bcloud/DownloadPage.py:818 #: ../bcloud/TrashPage.py:66 ../bcloud/UploadPage.py:180 msgid "Remove" msgstr "删除" -#: ../bcloud/CloudPage.py:163 ../bcloud/DownloadPage.py:230 +#: ../bcloud/CloudPage.py:163 ../bcloud/DownloadPage.py:253 #: ../bcloud/UploadPage.py:212 msgid "Progress" msgstr "进度" @@ -213,7 +213,7 @@ msgstr "将下载链接贴到这里, 每行一个" msgid "Support http/https/ftp/thunder/qqdl/flashget/eMule/Magnet format" msgstr "支持 HTTP/HTTPS/FTP/迅雷/旋风/快车/电驴/磁链 等格式" -#: ../bcloud/Config.py:55 +#: ../bcloud/Config.py:57 msgid "Baidu Pan client for GNU/Linux desktop users." msgstr "百度网盘的Linux客户端" @@ -233,57 +233,69 @@ msgstr "已取消" msgid "ERROR" msgstr "错误" -#: ../bcloud/DownloadPage.py:68 ../bcloud/IconWindow.py:346 -#: ../bcloud/PreferencesDialog.py:93 +#: ../bcloud/DownloadPage.py:49 +msgid "Do you want to remove unfinished tasks?" +msgstr "" + +#: ../bcloud/DownloadPage.py:51 +msgid "Do you want to remove unfinished task?" +msgstr "" + +#: ../bcloud/DownloadPage.py:57 +msgid "Do not ask again" +msgstr "" + +#: ../bcloud/DownloadPage.py:91 ../bcloud/IconWindow.py:346 +#: ../bcloud/PreferencesDialog.py:110 msgid "Download" msgstr "下载" -#: ../bcloud/DownloadPage.py:70 +#: ../bcloud/DownloadPage.py:93 msgid "Downloading files" msgstr "正在下载的任务" -#: ../bcloud/DownloadPage.py:101 ../bcloud/DownloadPage.py:163 +#: ../bcloud/DownloadPage.py:124 ../bcloud/DownloadPage.py:186 #: ../bcloud/UploadPage.py:75 ../bcloud/UploadPage.py:147 msgid "Start" msgstr "开始" -#: ../bcloud/DownloadPage.py:110 ../bcloud/DownloadPage.py:167 +#: ../bcloud/DownloadPage.py:133 ../bcloud/DownloadPage.py:190 #: ../bcloud/UploadPage.py:84 ../bcloud/UploadPage.py:151 msgid "Pause" msgstr "暂停" -#: ../bcloud/DownloadPage.py:128 ../bcloud/DownloadPage.py:180 +#: ../bcloud/DownloadPage.py:151 ../bcloud/DownloadPage.py:203 msgid "Shutdown system after all tasks have finished" msgstr "" -#: ../bcloud/DownloadPage.py:152 ../bcloud/DownloadPage.py:187 +#: ../bcloud/DownloadPage.py:175 ../bcloud/DownloadPage.py:210 #: ../bcloud/UploadPage.py:139 ../bcloud/UploadPage.py:175 msgid "Remove completed tasks" msgstr "删除所有已完成的任务" -#: ../bcloud/DownloadPage.py:178 +#: ../bcloud/DownloadPage.py:201 msgid "Shutdown" msgstr "关机" -#: ../bcloud/DownloadPage.py:243 ../bcloud/UploadPage.py:225 +#: ../bcloud/DownloadPage.py:266 ../bcloud/UploadPage.py:225 msgid "State" msgstr "状态" -#: ../bcloud/DownloadPage.py:390 +#: ../bcloud/DownloadPage.py:413 msgid "Failed to scan folder to download" msgstr "扫描目录出错" -#: ../bcloud/DownloadPage.py:392 +#: ../bcloud/DownloadPage.py:415 #, python-brace-format msgid "Please download {0} again" msgstr "请重新下载 {0}" -#: ../bcloud/DownloadPage.py:415 +#: ../bcloud/DownloadPage.py:438 #, python-brace-format msgid "Task exists: {0}" msgstr "任务已存在: {0}" -#: ../bcloud/DownloadPage.py:425 ../bcloud/UploadPage.py:495 +#: ../bcloud/DownloadPage.py:450 ../bcloud/UploadPage.py:495 #, python-brace-format msgid "" "From {0}\n" @@ -292,36 +304,36 @@ msgstr "" "从 {0}\n" "到{1}" -#: ../bcloud/DownloadPage.py:509 +#: ../bcloud/DownloadPage.py:534 #, python-brace-format msgid "{0} downloaded" msgstr "{0} 下载完成" -#: ../bcloud/DownloadPage.py:532 +#: ../bcloud/DownloadPage.py:557 #, python-brace-format msgid "Error occurs will downloading {0}" msgstr "在下载 {0} 时出错" -#: ../bcloud/DownloadPage.py:538 +#: ../bcloud/DownloadPage.py:563 #, python-brace-format msgid "Disk Error: failed to read/write {0}" msgstr "磁盘错误: 无法读取/写入 {0}" -#: ../bcloud/DownloadPage.py:757 ../bcloud/DownloadPage.py:782 +#: ../bcloud/DownloadPage.py:783 ../bcloud/DownloadPage.py:808 #: ../bcloud/IconWindow.py:301 ../bcloud/IconWindow.py:328 #, python-brace-format msgid "Open With {0}" msgstr "使用 {0} 打开" -#: ../bcloud/DownloadPage.py:760 ../bcloud/IconWindow.py:305 +#: ../bcloud/DownloadPage.py:786 ../bcloud/IconWindow.py:305 msgid "Open With" msgstr "打开方式" -#: ../bcloud/DownloadPage.py:772 ../bcloud/IconWindow.py:317 +#: ../bcloud/DownloadPage.py:798 ../bcloud/IconWindow.py:317 msgid "Other Application..." msgstr "其它程序..." -#: ../bcloud/DownloadPage.py:785 ../bcloud/IconWindow.py:332 +#: ../bcloud/DownloadPage.py:811 ../bcloud/IconWindow.py:332 msgid "Open With Other Application..." msgstr "使用其它程序打开..." @@ -357,7 +369,7 @@ msgstr "显示网盘中的所有文件" msgid "Search documents and folders by name" msgstr "搜索文件名" -#: ../bcloud/IconWindow.py:176 ../bcloud/IconWindow.py:753 +#: ../bcloud/IconWindow.py:176 ../bcloud/IconWindow.py:777 msgid "Error: Move folder to itself!" msgstr "错误: 无法将文件夹移动到自身" @@ -374,7 +386,7 @@ msgstr "上传文件..." msgid "Upload Folders..." msgstr "上传文件夹.." -#: ../bcloud/IconWindow.py:239 ../bcloud/IconWindow.py:376 +#: ../bcloud/IconWindow.py:239 ../bcloud/IconWindow.py:379 msgid "Properties" msgstr "属性" @@ -398,39 +410,49 @@ msgstr "离线下载" msgid "Copy Link" msgstr "复制链接地址" -#: ../bcloud/IconWindow.py:349 ../bcloud/SharePage.py:59 +#: ../bcloud/IconWindow.py:349 +#, fuzzy +msgid "Download to..." +msgstr "下载" + +#: ../bcloud/IconWindow.py:352 ../bcloud/SharePage.py:59 msgid "Share" msgstr "分享" -#: ../bcloud/IconWindow.py:352 +#: ../bcloud/IconWindow.py:355 msgid "Private Share" msgstr "" -#: ../bcloud/IconWindow.py:358 ../bcloud/IconWindow.py:574 +#: ../bcloud/IconWindow.py:361 ../bcloud/IconWindow.py:598 msgid "Move To..." msgstr "移动到..." -#: ../bcloud/IconWindow.py:361 ../bcloud/IconWindow.py:598 +#: ../bcloud/IconWindow.py:364 ../bcloud/IconWindow.py:622 msgid "Copy To..." msgstr "复制到..." -#: ../bcloud/IconWindow.py:364 +#: ../bcloud/IconWindow.py:367 msgid "Rename..." msgstr "重命名..." -#: ../bcloud/IconWindow.py:370 +#: ../bcloud/IconWindow.py:373 msgid "Move to Trash" msgstr "丢弃到回收站" -#: ../bcloud/IconWindow.py:507 +#: ../bcloud/IconWindow.py:510 msgid "Failed to copy link" msgstr "复制链接失败" -#: ../bcloud/IconWindow.py:533 ../bcloud/IconWindow.py:553 +#: ../bcloud/IconWindow.py:537 +#, fuzzy +msgid "Save to..." +msgstr "保存到.." + +#: ../bcloud/IconWindow.py:557 ../bcloud/IconWindow.py:577 msgid "Failed to share selected files" msgstr "无法分享选中的文件" -#: ../bcloud/IconWindow.py:711 ../bcloud/SharePage.py:180 +#: ../bcloud/IconWindow.py:735 ../bcloud/SharePage.py:180 msgid "Modified" msgstr "修改时间" @@ -467,131 +489,139 @@ msgid "Use Status Icon:" msgstr "最小化到系统托盘:" #: ../bcloud/PreferencesDialog.py:77 +msgid "Startup minimized:" +msgstr "" + +#: ../bcloud/PreferencesDialog.py:94 msgid "Display Avatar:" msgstr "显示用户头像:" -#: ../bcloud/PreferencesDialog.py:95 +#: ../bcloud/PreferencesDialog.py:112 msgid "Save To:" msgstr "保存到:" -#: ../bcloud/PreferencesDialog.py:104 +#: ../bcloud/PreferencesDialog.py:121 msgid "Concurrent downloads:" msgstr "同时下载:" -#: ../bcloud/PreferencesDialog.py:114 +#: ../bcloud/PreferencesDialog.py:131 msgid "Per task:" msgstr "每个下载任务:" -#: ../bcloud/PreferencesDialog.py:122 +#: ../bcloud/PreferencesDialog.py:139 msgid "connections" msgstr "个连接" -#: ../bcloud/PreferencesDialog.py:126 +#: ../bcloud/PreferencesDialog.py:143 msgid "Retries each:" msgstr "重连间隔:" -#: ../bcloud/PreferencesDialog.py:133 +#: ../bcloud/PreferencesDialog.py:150 msgid "0: disable retries" msgstr "0: 禁止重新连接" -#: ../bcloud/PreferencesDialog.py:135 +#: ../bcloud/PreferencesDialog.py:152 msgid "minutes" msgstr "分钟" -#: ../bcloud/PreferencesDialog.py:139 +#: ../bcloud/PreferencesDialog.py:156 msgid "Download timeout:" msgstr "下载超时:" -#: ../bcloud/PreferencesDialog.py:148 +#: ../bcloud/PreferencesDialog.py:165 msgid "seconds" msgstr "秒" -#: ../bcloud/PreferencesDialog.py:152 +#: ../bcloud/PreferencesDialog.py:169 msgid "File exists while downloading:" msgstr "下载时如果文件已存在:" -#: ../bcloud/PreferencesDialog.py:156 ../bcloud/PreferencesDialog.py:200 +#: ../bcloud/PreferencesDialog.py:173 ../bcloud/PreferencesDialog.py:228 msgid "Do Nothing" msgstr "什么都不做" -#: ../bcloud/PreferencesDialog.py:157 ../bcloud/PreferencesDialog.py:201 +#: ../bcloud/PreferencesDialog.py:174 ../bcloud/PreferencesDialog.py:229 msgid "Overwrite" msgstr "覆盖" -#: ../bcloud/PreferencesDialog.py:158 ../bcloud/PreferencesDialog.py:202 +#: ../bcloud/PreferencesDialog.py:175 ../bcloud/PreferencesDialog.py:230 msgid "Rename Automatically" msgstr "自动重命名" -#: ../bcloud/PreferencesDialog.py:162 +#: ../bcloud/PreferencesDialog.py:179 msgid "What to do when downloading a file which already exists on local disk" msgstr "当下载一个文件时, 本地有相同名称的文件存在" -#: ../bcloud/PreferencesDialog.py:172 ../bcloud/UploadPage.py:48 +#: ../bcloud/PreferencesDialog.py:183 +msgid "Ask me when deleting unfinished tasks:" +msgstr "" + +#: ../bcloud/PreferencesDialog.py:200 ../bcloud/UploadPage.py:48 msgid "Upload" msgstr "上传" -#: ../bcloud/PreferencesDialog.py:174 +#: ../bcloud/PreferencesDialog.py:202 msgid "Concurrent uploads:" msgstr "同时上传:" -#: ../bcloud/PreferencesDialog.py:184 +#: ../bcloud/PreferencesDialog.py:212 msgid "Upload hidden files:" msgstr "上传隐藏文件:" -#: ../bcloud/PreferencesDialog.py:190 +#: ../bcloud/PreferencesDialog.py:218 msgid "Also upload hidden files and folders" msgstr "同时上传隐藏文件文件和文件夹" -#: ../bcloud/PreferencesDialog.py:196 +#: ../bcloud/PreferencesDialog.py:224 msgid "File exists while uploading:" msgstr "上传时如果文件已存在:" -#: ../bcloud/PreferencesDialog.py:205 +#: ../bcloud/PreferencesDialog.py:233 msgid "What to do when uploading a file which already exists on server" msgstr "当上传一个文件到服务器时, 服务器上已经有同名文件存在" -#: ../bcloud/PreferencesDialog.py:209 +#: ../bcloud/PreferencesDialog.py:237 msgid "Enable Sync:" msgstr "打开同步:" -#: ../bcloud/PreferencesDialog.py:217 +#: ../bcloud/PreferencesDialog.py:245 msgid "Sync Dir:" msgstr "同步目录:" -#: ../bcloud/PreferencesDialog.py:226 +#: ../bcloud/PreferencesDialog.py:254 msgid "Dest Sync Dir:" msgstr "远程目录:" -#: ../bcloud/PropertiesDialog.py:26 ../bcloud/PropertiesDialog.py:95 +#: ../bcloud/PropertiesDialog.py:26 ../bcloud/PropertiesDialog.py:98 msgid " Properties" msgstr " 的属性" -#: ../bcloud/PropertiesDialog.py:42 ../bcloud/PropertiesDialog.py:108 +#: ../bcloud/PropertiesDialog.py:45 ../bcloud/PropertiesDialog.py:114 msgid "Name:" msgstr "文件名:" -#: ../bcloud/PropertiesDialog.py:47 ../bcloud/PropertiesDialog.py:113 +#: ../bcloud/PropertiesDialog.py:50 ../bcloud/PropertiesDialog.py:119 msgid "Location:" msgstr "位置:" -#: ../bcloud/PropertiesDialog.py:60 ../bcloud/PropertiesDialog.py:62 +#: ../bcloud/PropertiesDialog.py:63 ../bcloud/PropertiesDialog.py:65 msgid " bytes" msgstr " 字节" -#: ../bcloud/PropertiesDialog.py:75 +#: ../bcloud/PropertiesDialog.py:78 msgid "Created:" msgstr "创建:" -#: ../bcloud/PropertiesDialog.py:80 +#: ../bcloud/PropertiesDialog.py:83 msgid "Modified:" msgstr "修改:" -#: ../bcloud/PropertiesDialog.py:125 +#: ../bcloud/PropertiesDialog.py:131 #, python-brace-format msgid "{0} folders, {1} files" msgstr "{0} 个文件夹, {1} 个文件" -#: ../bcloud/PropertiesDialog.py:126 +#: ../bcloud/PropertiesDialog.py:132 msgid "Contents:" msgstr "内容:" @@ -682,87 +712,103 @@ msgstr "密码 .." msgid "Remember Password" msgstr "记住密码" -#: ../bcloud/SigninDialog.py:165 +#: ../bcloud/SigninDialog.py:168 msgid "Signin Automatically" msgstr "自动登录" -#: ../bcloud/SigninDialog.py:171 ../bcloud/SigninDialog.py:240 +#: ../bcloud/SigninDialog.py:177 ../bcloud/SigninDialog.py:246 msgid "Sign in" msgstr "登录" -#: ../bcloud/SigninDialog.py:181 +#: ../bcloud/SigninDialog.py:187 msgid "Failed to sign in, please try again." msgstr "登录失败, 请重试" -#: ../bcloud/SigninDialog.py:265 ../bcloud/SigninDialog.py:274 +#: ../bcloud/SigninDialog.py:271 ../bcloud/SigninDialog.py:280 msgid "In process..." msgstr "正在处理..." -#: ../bcloud/SigninDialog.py:283 +#: ../bcloud/SigninDialog.py:289 msgid "Failed to get bdstoken!" msgstr "获取bdstoken 失败!" -#: ../bcloud/SigninDialog.py:295 +#: ../bcloud/SigninDialog.py:301 msgid "Login failed, please try again" msgstr "登录失败, 请重试" -#: ../bcloud/SigninDialog.py:300 ../bcloud/SigninDialog.py:320 +#: ../bcloud/SigninDialog.py:306 ../bcloud/SigninDialog.py:322 msgid "Get bdstoken..." msgstr "获取bdstoken..." -#: ../bcloud/SigninDialog.py:317 ../bcloud/SigninDialog.py:381 -msgid "Please input verification code!" -msgstr "请输入验证码!" - -#: ../bcloud/SigninDialog.py:329 +#: ../bcloud/SigninDialog.py:331 msgid "Password error, please try again" msgstr "密码错误, 请重试" -#: ../bcloud/SigninDialog.py:333 +#: ../bcloud/SigninDialog.py:335 msgid "Verfication code error, please try again" msgstr "验证码错误, 请重试" -#: ../bcloud/SigninDialog.py:339 +#: ../bcloud/SigninDialog.py:341 msgid "Does not support SMS/Email verification!" msgstr "不支持手机短信/邮件验证!" -#: ../bcloud/SigninDialog.py:343 +#: ../bcloud/SigninDialog.py:347 +msgid "NET:登录失败,请在弹出的窗口操作,或重新登录" +msgstr "" + +#: ../bcloud/SigninDialog.py:352 +msgid "NET:近期登录次数过多, 请先通过 passport.baidu.com 解除锁定" +msgstr "" + +#: ../bcloud/SigninDialog.py:357 +msgid "NET:登录过于频繁,请24小时后再试" +msgstr "" + +#: ../bcloud/SigninDialog.py:362 +msgid "NET:账号异常,请在当前网络环境下在百度网页端正常登录一次" +msgstr "" + +#: ../bcloud/SigninDialog.py:366 msgid "Unknown error, please try again" msgstr "未知错误, 请重试" -#: ../bcloud/SigninDialog.py:350 +#: ../bcloud/SigninDialog.py:373 msgid "Failed to request public key, please try again" msgstr "获取公钥失败, 请重试" -#: ../bcloud/SigninDialog.py:365 +#: ../bcloud/SigninDialog.py:388 msgid "Failed to check login, please try again" msgstr "检测登录历史失败, 请重试" -#: ../bcloud/SigninDialog.py:394 +#: ../bcloud/SigninDialog.py:405 +msgid "Please input verification code!" +msgstr "请输入验证码!" + +#: ../bcloud/SigninDialog.py:418 msgid "Failed to get UBI, please try again." msgstr "获取UBI失败, 请重试" -#: ../bcloud/SigninDialog.py:397 +#: ../bcloud/SigninDialog.py:421 msgid "Check login" msgstr "检测登录历史" -#: ../bcloud/SigninDialog.py:405 +#: ../bcloud/SigninDialog.py:429 msgid "Failed to get token, please try again." msgstr "获取token失败, 请重试" -#: ../bcloud/SigninDialog.py:412 +#: ../bcloud/SigninDialog.py:436 msgid "Get UBI..." msgstr "获取UBI..." -#: ../bcloud/SigninDialog.py:421 +#: ../bcloud/SigninDialog.py:445 msgid "Failed to get BAIDUID cookie, please try again." msgstr "获取BAIDUID cookie失败, 请重试" -#: ../bcloud/SigninDialog.py:424 +#: ../bcloud/SigninDialog.py:448 msgid "Get TOKEN..." msgstr "获取 TOKEN..." -#: ../bcloud/SigninDialog.py:442 +#: ../bcloud/SigninDialog.py:465 msgid "Get BAIDUID..." msgstr "获取BAIDUID..." diff --git a/po/zh_TW.po b/po/zh_TW.po index 1d85ddf..a703bd9 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-01-10 10:41+0800\n" +"POT-Creation-Date: 2017-05-26 21:27+0800\n" "PO-Revision-Date: 2014-10-21 17:15+0800\n" "Last-Translator: CzBiX \n" "Language-Team: Chinese (traditional)\n" @@ -17,39 +17,39 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.4\n" -#: ../bcloud/App.py:100 ../bcloud/PreferencesDialog.py:18 +#: ../bcloud/App.py:104 ../bcloud/PreferencesDialog.py:18 msgid "Preferences" msgstr "偏好設定" -#: ../bcloud/App.py:101 +#: ../bcloud/App.py:105 msgid "Sign out" msgstr "登出" -#: ../bcloud/App.py:102 +#: ../bcloud/App.py:106 msgid "About" msgstr "關於" -#: ../bcloud/App.py:103 ../bcloud/App.py:443 +#: ../bcloud/App.py:107 ../bcloud/App.py:450 msgid "Quit" msgstr "退出" -#: ../bcloud/App.py:155 +#: ../bcloud/App.py:160 msgid "Unknown" msgstr "未知" -#: ../bcloud/App.py:421 +#: ../bcloud/App.py:428 msgid "Show App" msgstr "顯示程式" -#: ../bcloud/App.py:429 +#: ../bcloud/App.py:436 msgid "Pause Upload Tasks" msgstr "暫停所有上傳任務" -#: ../bcloud/App.py:435 +#: ../bcloud/App.py:442 msgid "Pause Download Tasks" msgstr "暫停所有下載任務" -#: ../bcloud/App.py:489 +#: ../bcloud/App.py:496 #, python-brace-format msgid "{0} copied to clipboard" msgstr "{0} 已被複製到剪貼板" @@ -59,15 +59,15 @@ msgid "Select All" msgstr "全選" #: ../bcloud/BTBrowserDialog.py:64 ../bcloud/CloudPage.py:150 -#: ../bcloud/DownloadPage.py:223 ../bcloud/IconWindow.py:688 +#: ../bcloud/DownloadPage.py:246 ../bcloud/IconWindow.py:712 #: ../bcloud/SharePage.py:162 ../bcloud/TrashPage.py:141 #: ../bcloud/UploadPage.py:205 msgid "Name" msgstr "檔案名稱" #: ../bcloud/BTBrowserDialog.py:68 ../bcloud/CloudPage.py:157 -#: ../bcloud/DownloadPage.py:237 ../bcloud/IconWindow.py:704 -#: ../bcloud/PropertiesDialog.py:55 ../bcloud/SharePage.py:174 +#: ../bcloud/DownloadPage.py:260 ../bcloud/IconWindow.py:728 +#: ../bcloud/PropertiesDialog.py:58 ../bcloud/SharePage.py:174 #: ../bcloud/TrashPage.py:156 ../bcloud/UploadPage.py:219 msgid "Size" msgstr "大小" @@ -141,12 +141,12 @@ msgstr "離線下載" msgid "Create new cloud task" msgstr "新增離線下載" -#: ../bcloud/CloudPage.py:63 ../bcloud/DownloadPage.py:118 +#: ../bcloud/CloudPage.py:63 ../bcloud/DownloadPage.py:141 #: ../bcloud/UploadPage.py:92 msgid "Open target directory" msgstr "打開所在目錄" -#: ../bcloud/CloudPage.py:78 ../bcloud/DownloadPage.py:144 +#: ../bcloud/CloudPage.py:78 ../bcloud/DownloadPage.py:167 #: ../bcloud/UploadPage.py:131 msgid "Remove selected tasks" msgstr "刪除選中的任務" @@ -159,7 +159,7 @@ msgstr "刪除已完成的離線任務" msgid "New Link Task" msgstr "新增連結任務" -#: ../bcloud/CloudPage.py:114 ../bcloud/DownloadPage.py:171 +#: ../bcloud/CloudPage.py:114 ../bcloud/DownloadPage.py:194 #: ../bcloud/UploadPage.py:168 msgid "Open Directory" msgstr "打開所在目錄" @@ -169,12 +169,12 @@ msgid "Clear" msgstr "清空" #: ../bcloud/CloudPage.py:123 ../bcloud/CloudPage.py:124 -#: ../bcloud/DownloadPage.py:192 ../bcloud/DownloadPage.py:792 +#: ../bcloud/DownloadPage.py:215 ../bcloud/DownloadPage.py:818 #: ../bcloud/TrashPage.py:66 ../bcloud/UploadPage.py:180 msgid "Remove" msgstr "刪除" -#: ../bcloud/CloudPage.py:163 ../bcloud/DownloadPage.py:230 +#: ../bcloud/CloudPage.py:163 ../bcloud/DownloadPage.py:253 #: ../bcloud/UploadPage.py:212 msgid "Progress" msgstr "進度" @@ -213,7 +213,7 @@ msgstr "將下載連結貼到這裡, 每行一個" msgid "Support http/https/ftp/thunder/qqdl/flashget/eMule/Magnet format" msgstr "支援 HTTP/HTTPS/FTP/迅雷/旋風/快車/電驢/磁鏈 等格式" -#: ../bcloud/Config.py:55 +#: ../bcloud/Config.py:57 msgid "Baidu Pan client for GNU/Linux desktop users." msgstr "百度網盤的 Linux 客戶端" @@ -233,57 +233,69 @@ msgstr "已取消" msgid "ERROR" msgstr "錯誤" -#: ../bcloud/DownloadPage.py:68 ../bcloud/IconWindow.py:346 -#: ../bcloud/PreferencesDialog.py:93 +#: ../bcloud/DownloadPage.py:49 +msgid "Do you want to remove unfinished tasks?" +msgstr "" + +#: ../bcloud/DownloadPage.py:51 +msgid "Do you want to remove unfinished task?" +msgstr "" + +#: ../bcloud/DownloadPage.py:57 +msgid "Do not ask again" +msgstr "" + +#: ../bcloud/DownloadPage.py:91 ../bcloud/IconWindow.py:346 +#: ../bcloud/PreferencesDialog.py:110 msgid "Download" msgstr "下載" -#: ../bcloud/DownloadPage.py:70 +#: ../bcloud/DownloadPage.py:93 msgid "Downloading files" msgstr "正在下載的任務" -#: ../bcloud/DownloadPage.py:101 ../bcloud/DownloadPage.py:163 +#: ../bcloud/DownloadPage.py:124 ../bcloud/DownloadPage.py:186 #: ../bcloud/UploadPage.py:75 ../bcloud/UploadPage.py:147 msgid "Start" msgstr "開始" -#: ../bcloud/DownloadPage.py:110 ../bcloud/DownloadPage.py:167 +#: ../bcloud/DownloadPage.py:133 ../bcloud/DownloadPage.py:190 #: ../bcloud/UploadPage.py:84 ../bcloud/UploadPage.py:151 msgid "Pause" msgstr "暫停" -#: ../bcloud/DownloadPage.py:128 ../bcloud/DownloadPage.py:180 +#: ../bcloud/DownloadPage.py:151 ../bcloud/DownloadPage.py:203 msgid "Shutdown system after all tasks have finished" msgstr "" -#: ../bcloud/DownloadPage.py:152 ../bcloud/DownloadPage.py:187 +#: ../bcloud/DownloadPage.py:175 ../bcloud/DownloadPage.py:210 #: ../bcloud/UploadPage.py:139 ../bcloud/UploadPage.py:175 msgid "Remove completed tasks" msgstr "刪除所有已完成的任務" -#: ../bcloud/DownloadPage.py:178 +#: ../bcloud/DownloadPage.py:201 msgid "Shutdown" msgstr "關機" -#: ../bcloud/DownloadPage.py:243 ../bcloud/UploadPage.py:225 +#: ../bcloud/DownloadPage.py:266 ../bcloud/UploadPage.py:225 msgid "State" msgstr "狀態" -#: ../bcloud/DownloadPage.py:390 +#: ../bcloud/DownloadPage.py:413 msgid "Failed to scan folder to download" msgstr "掃描目錄出錯" -#: ../bcloud/DownloadPage.py:392 +#: ../bcloud/DownloadPage.py:415 #, python-brace-format msgid "Please download {0} again" msgstr "請重新下載 {0}" -#: ../bcloud/DownloadPage.py:415 +#: ../bcloud/DownloadPage.py:438 #, python-brace-format msgid "Task exists: {0}" msgstr "任務已存在: {0}" -#: ../bcloud/DownloadPage.py:425 ../bcloud/UploadPage.py:495 +#: ../bcloud/DownloadPage.py:450 ../bcloud/UploadPage.py:495 #, python-brace-format msgid "" "From {0}\n" @@ -292,36 +304,36 @@ msgstr "" "從 {0}\n" "到{1}" -#: ../bcloud/DownloadPage.py:509 +#: ../bcloud/DownloadPage.py:534 #, python-brace-format msgid "{0} downloaded" msgstr "{0} 下載完成" -#: ../bcloud/DownloadPage.py:532 +#: ../bcloud/DownloadPage.py:557 #, python-brace-format msgid "Error occurs will downloading {0}" msgstr "在下載 {0} 時出錯" -#: ../bcloud/DownloadPage.py:538 +#: ../bcloud/DownloadPage.py:563 #, python-brace-format msgid "Disk Error: failed to read/write {0}" msgstr "硬碟錯誤: 無法讀取/寫入 {0}" -#: ../bcloud/DownloadPage.py:757 ../bcloud/DownloadPage.py:782 +#: ../bcloud/DownloadPage.py:783 ../bcloud/DownloadPage.py:808 #: ../bcloud/IconWindow.py:301 ../bcloud/IconWindow.py:328 #, python-brace-format msgid "Open With {0}" msgstr "使用 {0} 打開" -#: ../bcloud/DownloadPage.py:760 ../bcloud/IconWindow.py:305 +#: ../bcloud/DownloadPage.py:786 ../bcloud/IconWindow.py:305 msgid "Open With" msgstr "打開方式" -#: ../bcloud/DownloadPage.py:772 ../bcloud/IconWindow.py:317 +#: ../bcloud/DownloadPage.py:798 ../bcloud/IconWindow.py:317 msgid "Other Application..." msgstr "其它程序..." -#: ../bcloud/DownloadPage.py:785 ../bcloud/IconWindow.py:332 +#: ../bcloud/DownloadPage.py:811 ../bcloud/IconWindow.py:332 msgid "Open With Other Application..." msgstr "使用其它程序打開..." @@ -357,7 +369,7 @@ msgstr "顯示網盤中的所有檔案" msgid "Search documents and folders by name" msgstr "搜尋檔案名稱" -#: ../bcloud/IconWindow.py:176 ../bcloud/IconWindow.py:753 +#: ../bcloud/IconWindow.py:176 ../bcloud/IconWindow.py:777 msgid "Error: Move folder to itself!" msgstr "錯誤: 無法將目錄移動到自身" @@ -374,7 +386,7 @@ msgstr "上傳檔案..." msgid "Upload Folders..." msgstr "上傳目錄.." -#: ../bcloud/IconWindow.py:239 ../bcloud/IconWindow.py:376 +#: ../bcloud/IconWindow.py:239 ../bcloud/IconWindow.py:379 msgid "Properties" msgstr "屬性" @@ -398,39 +410,49 @@ msgstr "離線下載" msgid "Copy Link" msgstr "複製連結網址" -#: ../bcloud/IconWindow.py:349 ../bcloud/SharePage.py:59 +#: ../bcloud/IconWindow.py:349 +#, fuzzy +msgid "Download to..." +msgstr "下載" + +#: ../bcloud/IconWindow.py:352 ../bcloud/SharePage.py:59 msgid "Share" msgstr "分享" -#: ../bcloud/IconWindow.py:352 +#: ../bcloud/IconWindow.py:355 msgid "Private Share" msgstr "" -#: ../bcloud/IconWindow.py:358 ../bcloud/IconWindow.py:574 +#: ../bcloud/IconWindow.py:361 ../bcloud/IconWindow.py:598 msgid "Move To..." msgstr "移動到..." -#: ../bcloud/IconWindow.py:361 ../bcloud/IconWindow.py:598 +#: ../bcloud/IconWindow.py:364 ../bcloud/IconWindow.py:622 msgid "Copy To..." msgstr "複製到..." -#: ../bcloud/IconWindow.py:364 +#: ../bcloud/IconWindow.py:367 msgid "Rename..." msgstr "重命名..." -#: ../bcloud/IconWindow.py:370 +#: ../bcloud/IconWindow.py:373 msgid "Move to Trash" msgstr "丟進回收桶" -#: ../bcloud/IconWindow.py:507 +#: ../bcloud/IconWindow.py:510 msgid "Failed to copy link" msgstr "複製連結失敗" -#: ../bcloud/IconWindow.py:533 ../bcloud/IconWindow.py:553 +#: ../bcloud/IconWindow.py:537 +#, fuzzy +msgid "Save to..." +msgstr "保存到.." + +#: ../bcloud/IconWindow.py:557 ../bcloud/IconWindow.py:577 msgid "Failed to share selected files" msgstr "無法分享選中的檔案" -#: ../bcloud/IconWindow.py:711 ../bcloud/SharePage.py:180 +#: ../bcloud/IconWindow.py:735 ../bcloud/SharePage.py:180 msgid "Modified" msgstr "修改時間" @@ -467,131 +489,139 @@ msgid "Use Status Icon:" msgstr "最小化到系統托盤:" #: ../bcloud/PreferencesDialog.py:77 +msgid "Startup minimized:" +msgstr "" + +#: ../bcloud/PreferencesDialog.py:94 msgid "Display Avatar:" msgstr "顯示用戶頭像:" -#: ../bcloud/PreferencesDialog.py:95 +#: ../bcloud/PreferencesDialog.py:112 msgid "Save To:" msgstr "保存到:" -#: ../bcloud/PreferencesDialog.py:104 +#: ../bcloud/PreferencesDialog.py:121 msgid "Concurrent downloads:" msgstr "同時下載:" -#: ../bcloud/PreferencesDialog.py:114 +#: ../bcloud/PreferencesDialog.py:131 msgid "Per task:" msgstr "每個下載任務:" -#: ../bcloud/PreferencesDialog.py:122 +#: ../bcloud/PreferencesDialog.py:139 msgid "connections" msgstr "個連接" -#: ../bcloud/PreferencesDialog.py:126 +#: ../bcloud/PreferencesDialog.py:143 msgid "Retries each:" msgstr "重連間隔:" -#: ../bcloud/PreferencesDialog.py:133 +#: ../bcloud/PreferencesDialog.py:150 msgid "0: disable retries" msgstr "0: 禁止重新連接" -#: ../bcloud/PreferencesDialog.py:135 +#: ../bcloud/PreferencesDialog.py:152 msgid "minutes" msgstr "分鐘" -#: ../bcloud/PreferencesDialog.py:139 +#: ../bcloud/PreferencesDialog.py:156 msgid "Download timeout:" msgstr "下載超時:" -#: ../bcloud/PreferencesDialog.py:148 +#: ../bcloud/PreferencesDialog.py:165 msgid "seconds" msgstr "秒" -#: ../bcloud/PreferencesDialog.py:152 +#: ../bcloud/PreferencesDialog.py:169 msgid "File exists while downloading:" msgstr "下載時如果檔案已存在:" -#: ../bcloud/PreferencesDialog.py:156 ../bcloud/PreferencesDialog.py:200 +#: ../bcloud/PreferencesDialog.py:173 ../bcloud/PreferencesDialog.py:228 msgid "Do Nothing" msgstr "什麼都不做" -#: ../bcloud/PreferencesDialog.py:157 ../bcloud/PreferencesDialog.py:201 +#: ../bcloud/PreferencesDialog.py:174 ../bcloud/PreferencesDialog.py:229 msgid "Overwrite" msgstr "覆蓋" -#: ../bcloud/PreferencesDialog.py:158 ../bcloud/PreferencesDialog.py:202 +#: ../bcloud/PreferencesDialog.py:175 ../bcloud/PreferencesDialog.py:230 msgid "Rename Automatically" msgstr "自動重新命名" -#: ../bcloud/PreferencesDialog.py:162 +#: ../bcloud/PreferencesDialog.py:179 msgid "What to do when downloading a file which already exists on local disk" msgstr "當下載一個檔案時, 下載資料夾已有相同名稱的檔案存在" -#: ../bcloud/PreferencesDialog.py:172 ../bcloud/UploadPage.py:48 +#: ../bcloud/PreferencesDialog.py:183 +msgid "Ask me when deleting unfinished tasks:" +msgstr "" + +#: ../bcloud/PreferencesDialog.py:200 ../bcloud/UploadPage.py:48 msgid "Upload" msgstr "上傳" -#: ../bcloud/PreferencesDialog.py:174 +#: ../bcloud/PreferencesDialog.py:202 msgid "Concurrent uploads:" msgstr "同時上傳:" -#: ../bcloud/PreferencesDialog.py:184 +#: ../bcloud/PreferencesDialog.py:212 msgid "Upload hidden files:" msgstr "上傳隱藏文件:" -#: ../bcloud/PreferencesDialog.py:190 +#: ../bcloud/PreferencesDialog.py:218 msgid "Also upload hidden files and folders" msgstr "同時上傳隱藏文件文件和文件夾" -#: ../bcloud/PreferencesDialog.py:196 +#: ../bcloud/PreferencesDialog.py:224 msgid "File exists while uploading:" msgstr "上傳時如果檔案已存在:" -#: ../bcloud/PreferencesDialog.py:205 +#: ../bcloud/PreferencesDialog.py:233 msgid "What to do when uploading a file which already exists on server" msgstr "當上傳一個檔案到雲端時, 已經有同名檔案存在" -#: ../bcloud/PreferencesDialog.py:209 +#: ../bcloud/PreferencesDialog.py:237 msgid "Enable Sync:" msgstr "打開同步:" -#: ../bcloud/PreferencesDialog.py:217 +#: ../bcloud/PreferencesDialog.py:245 msgid "Sync Dir:" msgstr "同步目錄:" -#: ../bcloud/PreferencesDialog.py:226 +#: ../bcloud/PreferencesDialog.py:254 msgid "Dest Sync Dir:" msgstr "遠程目錄:" -#: ../bcloud/PropertiesDialog.py:26 ../bcloud/PropertiesDialog.py:95 +#: ../bcloud/PropertiesDialog.py:26 ../bcloud/PropertiesDialog.py:98 msgid " Properties" msgstr " 的屬性" -#: ../bcloud/PropertiesDialog.py:42 ../bcloud/PropertiesDialog.py:108 +#: ../bcloud/PropertiesDialog.py:45 ../bcloud/PropertiesDialog.py:114 msgid "Name:" msgstr "檔案名稱:" -#: ../bcloud/PropertiesDialog.py:47 ../bcloud/PropertiesDialog.py:113 +#: ../bcloud/PropertiesDialog.py:50 ../bcloud/PropertiesDialog.py:119 msgid "Location:" msgstr "位置:" -#: ../bcloud/PropertiesDialog.py:60 ../bcloud/PropertiesDialog.py:62 +#: ../bcloud/PropertiesDialog.py:63 ../bcloud/PropertiesDialog.py:65 msgid " bytes" msgstr " 字節" -#: ../bcloud/PropertiesDialog.py:75 +#: ../bcloud/PropertiesDialog.py:78 msgid "Created:" msgstr "新建:" -#: ../bcloud/PropertiesDialog.py:80 +#: ../bcloud/PropertiesDialog.py:83 msgid "Modified:" msgstr "修改:" -#: ../bcloud/PropertiesDialog.py:125 +#: ../bcloud/PropertiesDialog.py:131 #, python-brace-format msgid "{0} folders, {1} files" msgstr "{0} 個目錄, {1} 個檔案" -#: ../bcloud/PropertiesDialog.py:126 +#: ../bcloud/PropertiesDialog.py:132 msgid "Contents:" msgstr "內容:" @@ -682,87 +712,103 @@ msgstr "密碼 .." msgid "Remember Password" msgstr "記住密碼" -#: ../bcloud/SigninDialog.py:165 +#: ../bcloud/SigninDialog.py:168 msgid "Signin Automatically" msgstr "自動登錄" -#: ../bcloud/SigninDialog.py:171 ../bcloud/SigninDialog.py:240 +#: ../bcloud/SigninDialog.py:177 ../bcloud/SigninDialog.py:246 msgid "Sign in" msgstr "登錄" -#: ../bcloud/SigninDialog.py:181 +#: ../bcloud/SigninDialog.py:187 msgid "Failed to sign in, please try again." msgstr "登錄失敗, 請重試" -#: ../bcloud/SigninDialog.py:265 ../bcloud/SigninDialog.py:274 +#: ../bcloud/SigninDialog.py:271 ../bcloud/SigninDialog.py:280 msgid "In process..." msgstr "正在處理..." -#: ../bcloud/SigninDialog.py:283 +#: ../bcloud/SigninDialog.py:289 msgid "Failed to get bdstoken!" msgstr "獲取bdstoken 失敗!" -#: ../bcloud/SigninDialog.py:295 +#: ../bcloud/SigninDialog.py:301 msgid "Login failed, please try again" msgstr "登錄失敗, 請重試" -#: ../bcloud/SigninDialog.py:300 ../bcloud/SigninDialog.py:320 +#: ../bcloud/SigninDialog.py:306 ../bcloud/SigninDialog.py:322 msgid "Get bdstoken..." msgstr "獲取bdstoken..." -#: ../bcloud/SigninDialog.py:317 ../bcloud/SigninDialog.py:381 -msgid "Please input verification code!" -msgstr "請輸入驗證碼!" - -#: ../bcloud/SigninDialog.py:329 +#: ../bcloud/SigninDialog.py:331 msgid "Password error, please try again" msgstr "密碼錯誤, 請重試" -#: ../bcloud/SigninDialog.py:333 +#: ../bcloud/SigninDialog.py:335 msgid "Verfication code error, please try again" msgstr "驗證碼錯誤, 請重試" -#: ../bcloud/SigninDialog.py:339 +#: ../bcloud/SigninDialog.py:341 msgid "Does not support SMS/Email verification!" msgstr "不支持手機簡訊/郵件驗證!" -#: ../bcloud/SigninDialog.py:343 +#: ../bcloud/SigninDialog.py:347 +msgid "NET:登录失败,请在弹出的窗口操作,或重新登录" +msgstr "" + +#: ../bcloud/SigninDialog.py:352 +msgid "NET:近期登录次数过多, 请先通过 passport.baidu.com 解除锁定" +msgstr "" + +#: ../bcloud/SigninDialog.py:357 +msgid "NET:登录过于频繁,请24小时后再试" +msgstr "" + +#: ../bcloud/SigninDialog.py:362 +msgid "NET:账号异常,请在当前网络环境下在百度网页端正常登录一次" +msgstr "" + +#: ../bcloud/SigninDialog.py:366 msgid "Unknown error, please try again" msgstr "未知錯誤, 請重試" -#: ../bcloud/SigninDialog.py:350 +#: ../bcloud/SigninDialog.py:373 msgid "Failed to request public key, please try again" msgstr "獲取公鑰失敗, 請重試" -#: ../bcloud/SigninDialog.py:365 +#: ../bcloud/SigninDialog.py:388 msgid "Failed to check login, please try again" msgstr "檢測登錄歷史失敗, 請重試" -#: ../bcloud/SigninDialog.py:394 +#: ../bcloud/SigninDialog.py:405 +msgid "Please input verification code!" +msgstr "請輸入驗證碼!" + +#: ../bcloud/SigninDialog.py:418 msgid "Failed to get UBI, please try again." msgstr "獲取UBI失敗, 請重試" -#: ../bcloud/SigninDialog.py:397 +#: ../bcloud/SigninDialog.py:421 msgid "Check login" msgstr "檢測登錄歷史" -#: ../bcloud/SigninDialog.py:405 +#: ../bcloud/SigninDialog.py:429 msgid "Failed to get token, please try again." msgstr "獲取token失敗, 請重試" -#: ../bcloud/SigninDialog.py:412 +#: ../bcloud/SigninDialog.py:436 msgid "Get UBI..." msgstr "獲取UBI..." -#: ../bcloud/SigninDialog.py:421 +#: ../bcloud/SigninDialog.py:445 msgid "Failed to get BAIDUID cookie, please try again." msgstr "獲取BAIDUID cookie失敗, 請重試" -#: ../bcloud/SigninDialog.py:424 +#: ../bcloud/SigninDialog.py:448 msgid "Get TOKEN..." msgstr "獲取 TOKEN..." -#: ../bcloud/SigninDialog.py:442 +#: ../bcloud/SigninDialog.py:465 msgid "Get BAIDUID..." msgstr "獲取BAIDUID..." From 2e60b5a048ec0bcf7c4ff7ab5ebe08c1eddfa054 Mon Sep 17 00:00:00 2001 From: Boyuan Yang <073plan@gmail.com> Date: Fri, 26 May 2017 21:30:41 +0800 Subject: [PATCH 25/32] Update Simplified Chinese translation. --- po/zh_CN.po | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/po/zh_CN.po b/po/zh_CN.po index 9d044c2..b0fcad9 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -2,20 +2,21 @@ # Copyright (C) 2014 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # LiuLang , 2014. +# Boyuan Yang <073plan@gmail.coom>, 2017. # msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-05-26 21:27+0800\n" -"PO-Revision-Date: 2014-10-21 17:14+0800\n" -"Last-Translator: CzBiX \n" -"Language-Team: Chinese (simplified)\n" +"PO-Revision-Date: 2017-05-26 21:29+0800\n" +"Last-Translator: Boyuan Yang <073plan@gmail.com>\n" +"Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.11\n" #: ../bcloud/App.py:104 ../bcloud/PreferencesDialog.py:18 msgid "Preferences" @@ -235,15 +236,15 @@ msgstr "错误" #: ../bcloud/DownloadPage.py:49 msgid "Do you want to remove unfinished tasks?" -msgstr "" +msgstr "您是否想要移除未完成的任务?" #: ../bcloud/DownloadPage.py:51 msgid "Do you want to remove unfinished task?" -msgstr "" +msgstr "您是否想要移除未完成的任务?" #: ../bcloud/DownloadPage.py:57 msgid "Do not ask again" -msgstr "" +msgstr "不要再次询问" #: ../bcloud/DownloadPage.py:91 ../bcloud/IconWindow.py:346 #: ../bcloud/PreferencesDialog.py:110 @@ -266,7 +267,7 @@ msgstr "暂停" #: ../bcloud/DownloadPage.py:151 ../bcloud/DownloadPage.py:203 msgid "Shutdown system after all tasks have finished" -msgstr "" +msgstr "全部任务完成后关闭系统" #: ../bcloud/DownloadPage.py:175 ../bcloud/DownloadPage.py:210 #: ../bcloud/UploadPage.py:139 ../bcloud/UploadPage.py:175 @@ -411,9 +412,8 @@ msgid "Copy Link" msgstr "复制链接地址" #: ../bcloud/IconWindow.py:349 -#, fuzzy msgid "Download to..." -msgstr "下载" +msgstr "下载到..." #: ../bcloud/IconWindow.py:352 ../bcloud/SharePage.py:59 msgid "Share" @@ -421,7 +421,7 @@ msgstr "分享" #: ../bcloud/IconWindow.py:355 msgid "Private Share" -msgstr "" +msgstr "私有共享" #: ../bcloud/IconWindow.py:361 ../bcloud/IconWindow.py:598 msgid "Move To..." @@ -444,9 +444,8 @@ msgid "Failed to copy link" msgstr "复制链接失败" #: ../bcloud/IconWindow.py:537 -#, fuzzy msgid "Save to..." -msgstr "保存到.." +msgstr "保存到..." #: ../bcloud/IconWindow.py:557 ../bcloud/IconWindow.py:577 msgid "Failed to share selected files" @@ -473,8 +472,8 @@ msgid "" "Open the compressed version of videos, useful for those whose network " "connection is slow." msgstr "" -"播放压缩后视频(大概会压到480P, 画质可能会有损失).如果你的网速不理想, 这会很有" -"用" +"播放压缩后视频(大概会压到480P, 画质可能会有损失).如果你的网速不理想, 这会很" +"有用" #: ../bcloud/PreferencesDialog.py:49 msgid "Use notification:" @@ -490,7 +489,7 @@ msgstr "最小化到系统托盘:" #: ../bcloud/PreferencesDialog.py:77 msgid "Startup minimized:" -msgstr "" +msgstr "最小化启动:" #: ../bcloud/PreferencesDialog.py:94 msgid "Display Avatar:" @@ -554,7 +553,7 @@ msgstr "当下载一个文件时, 本地有相同名称的文件存在" #: ../bcloud/PreferencesDialog.py:183 msgid "Ask me when deleting unfinished tasks:" -msgstr "" +msgstr "删除未完成任务时询问我:" #: ../bcloud/PreferencesDialog.py:200 ../bcloud/UploadPage.py:48 msgid "Upload" @@ -754,19 +753,19 @@ msgstr "不支持手机短信/邮件验证!" #: ../bcloud/SigninDialog.py:347 msgid "NET:登录失败,请在弹出的窗口操作,或重新登录" -msgstr "" +msgstr "NET:登录失败,请在弹出的窗口操作,或重新登录" #: ../bcloud/SigninDialog.py:352 msgid "NET:近期登录次数过多, 请先通过 passport.baidu.com 解除锁定" -msgstr "" +msgstr "NET:近期登录次数过多, 请先通过 passport.baidu.com 解除锁定" #: ../bcloud/SigninDialog.py:357 msgid "NET:登录过于频繁,请24小时后再试" -msgstr "" +msgstr "NET:登录过于频繁,请24小时后再试" #: ../bcloud/SigninDialog.py:362 msgid "NET:账号异常,请在当前网络环境下在百度网页端正常登录一次" -msgstr "" +msgstr "NET:账号异常,请在当前网络环境下在百度网页端正常登录一次" #: ../bcloud/SigninDialog.py:366 msgid "Unknown error, please try again" From 3b08c3054e89ea3546d52a8bcbd892ee261602ef Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 1 Jun 2017 15:50:06 +0800 Subject: [PATCH 26/32] fix #23 --- bcloud/App.py | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/bcloud/App.py b/bcloud/App.py index fd67aa9..8e7fd31 100644 --- a/bcloud/App.py +++ b/bcloud/App.py @@ -1,4 +1,3 @@ - # Copyright (C) 2014-2015 LiuLang # Use of this source code is governed by GPLv3 license that can be found # in http://www.gnu.org/licenses/gpl-3.0.html @@ -9,17 +8,21 @@ import traceback import gi + gi.require_version('Gdk', '3.0') from gi.repository import Gdk from gi.repository import Gio from gi.repository import GLib from gi.repository import GObject + gi.require_version('Gtk', '3.0') from gi.repository import Gtk + gi.require_version('Notify', '0.7') from gi.repository import Notify from bcloud import Config + Config.check_first() _ = Config._ from bcloud import const @@ -41,16 +44,18 @@ from bcloud.FileWatcher import WatchFileChange try: -# Ubuntu Unity uses appindicator instead of status icon + # Ubuntu Unity uses appindicator instead of status icon + import gi + + gi.require_version('AppIndicator3', '0.1') from gi.repository import AppIndicator3 as AppIndicator except ImportError: logger.debug(traceback.format_exc()) - if Config.GTK_LE_36: GObject.threads_init() (ICON_COL, NAME_COL, TOOLTIP_COL, COLOR_COL) = list(range(4)) -BLINK_DELTA = 250 # 字体闪烁间隔, 250 miliseconds +BLINK_DELTA = 250 # 字体闪烁间隔, 250 miliseconds BLINK_SUSTAINED = 3 # 字体闪烁持续时间, 5 seconds # 用于处理拖放上传 @@ -61,7 +66,6 @@ class App: - profile = None cookie = None tokens = None @@ -174,7 +178,7 @@ def on_app_startup(self, app): key, mod = Gtk.accelerator_parse('F5') self.window.connect('activate-default', self.reload_current_page) self.window.add_accelerator('activate-default', - self.accel_group, key, mod, Gtk.AccelFlags.VISIBLE) + self.accel_group, key, mod, Gtk.AccelFlags.VISIBLE) def on_app_activate(self, app): if not self.profile: @@ -312,6 +316,7 @@ def update_quota(self, quota_info, error=None): def update_avatar(self): '''更新用户头像''' + def do_update_avatar(info, error=None): if error or not info: logger.error('Failed to get user avatar: %s, %s' % @@ -323,6 +328,7 @@ def do_update_avatar(info, error=None): self.profile['username'], uname, ]) + if not self.profile['display-avatar']: return self.img_avatar.props.tooltip_text = '' @@ -375,7 +381,7 @@ def init_filewatcher(self): enable_sync = self.profile['enable-sync'] if enable_sync: sync_dir = self.profile['sync-dir'] - #self.filewatcher = WatchFileChange(sync_dir, self.upload_page.add_bg_task) + # self.filewatcher = WatchFileChange(sync_dir, self.upload_page.add_bg_task) self.filewatcher = WatchFileChange(sync_dir, self) self.filewatcher.start() @@ -411,8 +417,8 @@ def on_nav_selection_changed(self, nav_selection): def init_status_icon(self): def on_status_icon_popup_menu(status_icon, event_button, event_time): menu.popup(None, None, - lambda a,b: Gtk.StatusIcon.position_menu(menu, status_icon), - None, event_button, event_time) + lambda a, b: Gtk.StatusIcon.position_menu(menu, status_icon), + None, event_button, event_time) def on_status_icon_activate(status_icon): if self.window.props.visible: @@ -433,15 +439,15 @@ def on_status_icon_activate(status_icon): menu.append(sep_item) pause_upload_item = Gtk.MenuItem.new_with_label( - _('Pause Upload Tasks')) + _('Pause Upload Tasks')) pause_upload_item.connect('activate', - lambda item: self.upload_page.pause_tasks()) + lambda item: self.upload_page.pause_tasks()) menu.append(pause_upload_item) pause_download_item = Gtk.MenuItem.new_with_label( - _('Pause Download Tasks')) + _('Pause Download Tasks')) pause_download_item.connect('activate', - lambda item: self.download_page.pause_tasks()) + lambda item: self.download_page.pause_tasks()) menu.append(pause_download_item) sep_item = Gtk.SeparatorMenuItem() @@ -456,8 +462,8 @@ def on_status_icon_activate(status_icon): if 'AppIndicator' in globals(): self.status_icon = AppIndicator.Indicator.new(Config.NAME, - Config.NAME, - AppIndicator.IndicatorCategory.APPLICATION_STATUS) + Config.NAME, + AppIndicator.IndicatorCategory.APPLICATION_STATUS) self.status_icon.set_menu(menu) self.status_icon.set_status(AppIndicator.IndicatorStatus.ACTIVE) else: @@ -476,7 +482,7 @@ def blink(): row[COLOR_COL] = self.default_color return False return True - + start_time = time.time() for index, p in enumerate(self.notebook): if p == page: From 42c07484324f78b5844374e004ff386f325f0521 Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 1 Jun 2017 16:01:37 +0800 Subject: [PATCH 27/32] fix #24 --- bcloud/auth.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bcloud/auth.py b/bcloud/auth.py index c129da9..ed1ee57 100644 --- a/bcloud/auth.py +++ b/bcloud/auth.py @@ -163,7 +163,7 @@ def refresh_signin_vcode(cookie, tokens, vcodetype): url = ''.join([ const.PASSPORT_BASE, 'v2/?reggetcodestr', - '&token=', tokens['token'], + '&token=', tokens, '&tpl=pp&apiver=v3', '&tt=', util.timestamp(), '&fr=ligin', From 474c387563d5b21e147fc326bdb258be674518f9 Mon Sep 17 00:00:00 2001 From: kang Date: Fri, 16 Jun 2017 10:35:30 +0800 Subject: [PATCH 28/32] add requirements.txt fix #33 --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..4380dae --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +keyring +pycrypto==2.6.1 From 6bf9876d777643726812021a293c34ed27938861 Mon Sep 17 00:00:00 2001 From: kang Date: Mon, 19 Jun 2017 20:38:25 +0800 Subject: [PATCH 29/32] =?UTF-8?q?=E7=BC=BA=E5=B0=91lxml=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++++ requirements.txt | 1 + 2 files changed, 7 insertions(+) diff --git a/README.md b/README.md index 9cf93cc..d16e3fd 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,13 @@ bcloud 是[百度网盘](http://pan.baidu.com)的Linux桌面客户端. ``` python3 setup.py install ``` +卸载执行: +```bash +python setup.py install --record files.txt #记录安装后文件的路径 +cat files.txt | xargs rm -rf #删除这些文件 +``` +**最近有不少用户反馈安装后无法启动,原因大多数是因为缺少某些依赖的模块。我已经添加了部分依赖到requiements.txt文件中。如还有报错请大家issues的时候附上log** Q&A === diff --git a/requirements.txt b/requirements.txt index 4380dae..decdca7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ keyring pycrypto==2.6.1 +lxml From b9d75ce60b74728222a2df13c05c261508981357 Mon Sep 17 00:00:00 2001 From: Boyuan Yang <073plan@gmail.com> Date: Wed, 28 Jun 2017 17:07:10 +0800 Subject: [PATCH 30/32] debian packaging for forked bcloud. --- debian/changelog | 24 ++++++++++++++++++++++++ debian/compat | 1 + debian/control | 41 +++++++++++++++++++++++++++++++++++++++++ debian/copyright | 29 +++++++++++++++++++++++++++++ debian/docs | 1 + debian/rules | 6 ++++++ debian/source/format | 1 + debian/watch | 4 ++++ 8 files changed, 107 insertions(+) create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/docs create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/watch diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..785d1fb --- /dev/null +++ b/debian/changelog @@ -0,0 +1,24 @@ +bcloud (3.9.1+git20170619-1) unstable; urgency=medium + + * New upstream snapshot. + + -- Boyuan Yang <073plan@gmail.com> Wed, 28 Jun 2017 17:03:14 +0800 + +bcloud (3.9.1+git20170531-1) unstable; urgency=medium + + * New upstream snapshot. + + -- Boyuan Yang <073plan@gmail.com> Thu, 01 Jun 2017 19:38:14 +0800 + +bcloud (3.9.1+git20170526-1) unstable; urgency=medium + + * New upstream snapshot. + + Finished zh_CN translations. + + -- Boyuan Yang <073plan@gmail.com> Fri, 26 May 2017 21:31:47 +0800 + +bcloud (3.9.1+git20170406-1) unstable; urgency=medium + + * Initial repack for Debian unstable. + + -- Boyuan Yang <073plan@gmail.com> Mon, 24 Apr 2017 17:19:54 +0800 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..c413799 --- /dev/null +++ b/debian/control @@ -0,0 +1,41 @@ +Source: bcloud +Maintainer: Yufei Kang +Uploaders: + Boyuan Yang <073plan@gmail.com>, +Section: python +Priority: optional +Build-Depends: + debhelper (>= 9), + dh-python, + python3-all, + python3-setuptools, +Standards-Version: 3.9.8 +X-Python3-Version: >= 3.3 +Homepage: https://github.com/Yufeikang/bcloud +Vcs-Git: https://github.com/Yufeikang/bcloud.git +Vcs-Browser: https://github.com/Yufeikang/bcloud.git + +Package: bcloud +Architecture: all +Depends: + gir1.2-appindicator3-0.1, + gir1.2-gnomekeyring-1.0, + gir1.2-gtk-3.0, + gir1.2-notify-0.7, + python3-crypto, + python3-cssselect, + python3-dbus, + python3-gi, + python3-keyring, + python3-lxml, + python3-pyinotify, + python3-urllib3, + ${misc:Depends}, + ${python3:Depends}, +Recommends: + notification-daemon, +Suggests: + gnome-icon-theme-symbolic, +Description: Baidu Pan client for Linux users + Alternative client of Baidu Pan (Baidu Personal Cloud) for Linux desktop + users. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..929b70b --- /dev/null +++ b/debian/copyright @@ -0,0 +1,29 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: bcloud +Upstream-Contact: Yufei Kang +Source: https://github.com/Yufeikang/bcloud + +Files: * +Copyright: 2014-2016, Liu Lang + 2016-2017, Yufei Kang +License: GPL-3 + +Files: debian/* +Copyright: 2017, Boyuan Yang <073plan@gmail.com> +License: GPL-3 + +License: GPL-3 + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License version 3 as + published by the Free Software Foundation. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU General Public + License version 3 can be found in "/usr/share/common-licenses/GPL-3". diff --git a/debian/docs b/debian/docs new file mode 100644 index 0000000..b43bf86 --- /dev/null +++ b/debian/docs @@ -0,0 +1 @@ +README.md diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..624ff3c --- /dev/null +++ b/debian/rules @@ -0,0 +1,6 @@ +#!/usr/bin/make -f + +export PYBUILD_NAME=bcloud + +%: + dh $@ --with python3 --buildsystem=pybuild diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..70786fa --- /dev/null +++ b/debian/watch @@ -0,0 +1,4 @@ +version=4 +opts="filenamemangle=s%(?:.*?)?v?(\d[\d.]*)\.tar\.gz%bcloud-$1.tar.gz%" \ + https://github.com/Yufeikang/bcloud/tags \ + (?:.*?/)?v?(\d[\d.]*)\.tar\.gz debian uupdate From 8845bd48e2130370b9418858fdc8cf8cd6486027 Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 9 Nov 2017 11:51:57 +0800 Subject: [PATCH 31/32] Update README.md --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index d16e3fd..b4280b4 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,13 @@ +## 公告 + +很遗憾这个项目要和大家说再见了,因为下列原因: + +1.这个项目使用的是百度webAPi,api不稳定经常变动 +2.这个项目的界面构建语言是GTK,跨平台性能差,不易扩展 +结束并不代表彻底结束,因为身在墙内,不可避免还不得不依赖百度网盘。最近没时间去调试百度的api,一直使用的是baidupcs的命令行版本,一直很稳定,作者也一直很勤劳的维护。而且baidupcs可以使用多线程加快下载速度。我使用的过程中速度还比较满意。所以,打算新开一个项目,使用electrion和react来构建GUI界面,使用baidupcs作为核心引擎构建一个全新的,跨平台的百度网盘自由版。 + +所谓重生吧,因为我的个人时间有限。希望有兴趣的朋友可以和我一起加入到这个项目一起开发,一起学习。另外,如果有朋友比较擅长做UI或者交互,可以贡献力量的欢迎👏加入。希望我们能做出漂亮又实用的工具 + 关于 ===== From f166e708b7509b46ba2d4495652c5bc594e05ff2 Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 9 Nov 2017 11:53:01 +0800 Subject: [PATCH 32/32] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b4280b4..bf05bc4 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ -## 公告 +# 公告 很遗憾这个项目要和大家说再见了,因为下列原因: -1.这个项目使用的是百度webAPi,api不稳定经常变动 -2.这个项目的界面构建语言是GTK,跨平台性能差,不易扩展 +*1.这个项目使用的是百度webAPi,api不稳定经常变动 +*2.这个项目的界面构建语言是GTK,跨平台性能差,不易扩展 + 结束并不代表彻底结束,因为身在墙内,不可避免还不得不依赖百度网盘。最近没时间去调试百度的api,一直使用的是baidupcs的命令行版本,一直很稳定,作者也一直很勤劳的维护。而且baidupcs可以使用多线程加快下载速度。我使用的过程中速度还比较满意。所以,打算新开一个项目,使用electrion和react来构建GUI界面,使用baidupcs作为核心引擎构建一个全新的,跨平台的百度网盘自由版。 -所谓重生吧,因为我的个人时间有限。希望有兴趣的朋友可以和我一起加入到这个项目一起开发,一起学习。另外,如果有朋友比较擅长做UI或者交互,可以贡献力量的欢迎👏加入。希望我们能做出漂亮又实用的工具 +**所谓重生吧,因为我的个人时间有限。希望有兴趣的朋友可以和我一起加入到这个项目一起开发,一起学习。另外,如果有朋友比较擅长做UI或者交互,可以贡献力量的欢迎👏加入。希望我们能做出漂亮又实用的工具** 关于