Beispiel #1
0
    def OkButtonEvent(self, event):
        """
                設定されたキーが重複している場合はエラーとする
        """
        # 他のビューとの重複調査
        if not views.KeyValueSettingDialogBase.KeySettingValidation(
                self.oldKeyConfig, self.values[0], self.log, self.checkEntries,
                True):
            return

        # このビュー内での重複調査
        newKeys = {}
        for name, keys in self.values[0].items():
            for key in keys.split("/"):
                newKeys.setdefault(key.upper(), set()).add(name)
        for key, names in newKeys.items():
            if key == _("なし"):
                continue
            if len(names) >= 2:
                entries = []
                for name in names:
                    entries.append(
                        keymap.makeEntry(self.values[1][name], key, None,
                                         self.log))
                if not keymap.permitConfrict(entries, self.log):
                    dialog(
                        _("エラー"),
                        _("以下の項目において、重複するキー %(key)s が設定されています。\n\n%(command)s")
                        % {
                            "key": key,
                            "command": names
                        }, self.wnd)
                    return
        event.Skip()
Beispiel #2
0
def getToken():
	manager = twitterAuthorization.TwitterAuthorization(constants.TWITTER_CONSUMER_KEY, constants.TWITTER_CONSUMER_SECRET, constants.TWITTER_PORT)
	l="ja"
	try:
		l=globalVars.app.config["general"]["language"].split("_")[0].lower()
	except:
		pass#end うまく読めなかったら ja を採用
	#end except
	manager.setMessage(
		lang=l,
		success=_("認証に成功しました。このウィンドウを閉じて、アプリケーションに戻ってください。"),
		failed=_("認証に失敗しました。もう一度お試しください。"),
		transfer=_("しばらくしても画面が切り替わらない場合は、別のブラウザでお試しください。")
	)
	webbrowser.open(manager.getUrl())
	d = views.auth.waitingDialog()
	d.Initialize(_("Twitterアカウント認証"))
	d.Show(False)
	while True:
		time.sleep(0.01)
		wx.YieldIfNeeded()
		if manager.getToken():
			d.Destroy()
			break
		if d.canceled == 1 or manager.getToken() == "":
			simpleDialog.dialog(_("処理結果"), _("キャンセルされました。"))
			manager.shutdown()
			d.Destroy()
			return
	return manager.getToken()
Beispiel #3
0
    def Search(self):
        basePath = self.parent.activeTab.listObject.rootDirectory
        out_lst = []  # 入力画面が出てるときに、もうファイルリスト取得を開始してしまう
        task = workerThreads.RegisterTask(workerThreadTasks.GetRecursiveFileList, {'path': basePath, 'out_lst': out_lst, 'eol': True})

        searchHistory = history.History(globalVars.app.config.getint("search", "history_count", 0, 0, 100), False)
        grepHistory = history.History(globalVars.app.config.getint("search", "history_count", 0, 0, 100), False)
        hist = {}
        try:
            with open(constants.HISTORY_FILE_NAME, 'rb') as f:
                hist = pickle.load(f)
                searchHistory.lst = hist["search"]
                searchHistory.cursor = len(hist["search"]) - 1
                grepHistory.lst = hist["grep"]
                grepHistory.cursor = len(hist["grep"]) - 1
        except BaseException:
            pass

        d = views.search.Dialog(basePath, list(reversed(searchHistory.getList())), list(reversed(grepHistory.getList())))
        d.Initialize()
        canceled = False
        while(True):
            ret = d.Show()
            if ret == wx.ID_CANCEL:
                task.Cancel()
                canceled = True
                break
            # end キャンセルして抜ける
            val = d.GetValue()
            if val['isRegularExpression']:
                ret = misc.ValidateRegularExpression(val['keyword'])
                if ret != "OK":
                    dialog(_("エラー"), _("正規表現の文法が間違っています。\nエラー内容: %(error)s") % {'error': ret})
                    continue
                # end 正規表現違う
            # end 正規表現モードがオンかどうか
            break
        # end 入力が正しくなるまで
        if canceled:
            return
        actionstr = "search" if val['type'] == 0 else "grep"
        target = {
            'action': actionstr,
            'basePath': basePath,
            'out_lst': out_lst,
            'keyword': val['keyword'],
            'isRegularExpression': val['isRegularExpression']}
        self.parent.Navigate(target, as_new_tab=True)

        if val['type'] == 0:
            searchHistory.add(val['keyword'])
        else:
            grepHistory.add(val['keyword'])
        hist["search"] = searchHistory.getList()
        hist["grep"] = grepHistory.getList()
        try:
            with open(constants.HISTORY_FILE_NAME, 'wb') as f:
                pickle.dump(hist, f)
        except BaseException:
            pass
Beispiel #4
0
 def updateUser(self):
     self.log.debug("Updating user info...")
     notFound = []
     ids = self.users.getUserIds()
     for i in self.splitIds(ids):
         try:
             result = self.tokenManager.getClient().get_users(
                 ids=i, user_fields="protected")
         except tweepy.Unauthorized as e:
             self.showTokenError()
             return
         except Exception as e:
             self.log.error(traceback.format_exc())
             simpleDialog.errorDialog(_("ユーザ情報の更新に失敗しました。詳細:%s") % e)
             return
         if result.errors:
             for err in result.errors:
                 if err["title"] == "Not Found Error":
                     notFound.append(err["value"])
                     continue
                 simpleDialog.errorDialog(
                     _("ユーザ情報の更新に失敗しました。詳細:%s") % err["detail"])
                 return
         data = result.data
         if data:
             for j in data:
                 self._updateUserInfo(j)
     if notFound:
         usernames = []
         for i in notFound:
             usernames.append(self.users.getData()[i]["user"])
         simpleDialog.errorDialog(
             _("以下のユーザの情報を取得できませんでした。") + "\n" + "\n".join(usernames))
     simpleDialog.dialog(_("完了"), _("ユーザ情報の更新が完了しました。"))
Beispiel #5
0
 def _GetNetworkResources(self):
     self.log.debug("Getting networkResource list...")
     try:
         h = win32wnet.WNetOpenEnum(5, 1, 0, None)
         #5=RESOURCE_CONTEXT
         #1=RESOURCETYPE_DISK
         lst = win32wnet.WNetEnumResource(h, 64)  #65以上の指定不可
         win32wnet.WNetCloseEnum(h)
     except win32net.error as er:
         dialog(
             _("エラー"),
             _("ネットワーク上のリソース一覧を取得できませんでした(%(error)s)") % {"error": str(er)})
         return
     #end 情報取得失敗
     lst.pop(0)  #先頭はドライブではない者が入るので省く
     for l in lst:
         ret, shfileinfo = shell.SHGetFileInfo(l.lpRemoteName, 0,
                                               shellcon.SHGFI_ICON)
         s = browsableObjects.NetworkResource()
         self.log.debug("network resource found and check IP address:" +
                        l.lpRemoteName[2:])
         s.Initialize(l.lpRemoteName[2:], l.lpRemoteName,
                      socket.getaddrinfo(l.lpRemoteName[2:], None)[0][4][0],
                      shfileinfo[0])
         self.networkResources.append(s)
Beispiel #6
0
 def _elevate(self):
     """権限昇格し、アクセス拒否になった項目を再実行する。"""
     if globalVars.app.GetFrozenStatus(
     ) is False:  # ビルド済みバイナリじゃないと昇格できないようにしてる
         dialog(_("エラー"), _("管理者権限の操作を行うためには、Falconをビルドして実行する必要があります。"))
         return
     # end ビルドしてないとダメ
     o = FileOperator(self.output["retry"])
     fn = o.pickle()
     try:
         ret = shell.ShellExecuteEx(shellcon.SEE_MASK_NOCLOSEPROCESS, 0,
                                    "runas", "fileop.exe", fn)
     except pywintypes.error as e:
         self.log.error("Cannot elevate (%s)" % str(e))
         self.output["failed"].append(o.FailAll())
         dialog("error", "error")
         return
     # end except
     pid = ret["hProcess"]
     win32event.WaitForSingleObject(pid, win32event.INFINITE)
     win32api.CloseHandle(pid)
     # 昇格先で失敗した項目を拾ってくる
     o = FileOperator(fn)
     self.output["succeeded"] += o.output["succeeded"]
     l = len(self.output["failed"])
     self.output["failed"][l:l] = o.output["failed"]
     self.log.debug("after elevation: success %s, failure %s." %
                    (self.output["succeeded"], len(self.output["failed"])))
Beispiel #7
0
Datei: main.py Projekt: yncat/TCV
    def OnMenuSelect(self, event):
        """メニュー項目が選択されたときのイベントハンドら。"""
        #ショートカットキーが無効状態のときは何もしない
        if not self.parent.shortcutEnable:
            event.Skip()
            return

        selected = event.GetId()  #メニュー識別しの数値が出る

        if selected == menuItemsStore.getRef("exit"):
            self.Exit()
        elif selected == menuItemsStore.getRef("versionInfo"):
            dialog(
                _("バージョン情報"),
                _("%(appName)s Version %(versionNumber)s.\nCopyright (C) %(year)s %(developerName)s"
                  ) % {
                      "appName": constants.APP_NAME,
                      "versionNumber": constants.APP_VERSION,
                      "year": constants.APP_COPYRIGHT_YEAR,
                      "developerName": constants.APP_DEVELOPERS
                  })
        elif selected == menuItemsStore.getRef("connect"):
            connectDialog = views.connect.Dialog()
            connectDialog.Initialize()
            ret = connectDialog.Show()
Beispiel #8
0
def RunFile(path, admin=False, prm="", workdir=""):
    """ファイルを起動する。admin=True の場合、管理者として実行する。"""
    path = os.path.expandvars(path)
    msg = "running '%s' prm='%s' workdir='%s' asAdmin=%s" % (
        path, prm, workdir, str(admin))
    log.debug(msg)
    msg = _("管理者で起動") if admin else _("起動")
    globalVars.app.say(msg)
    error = ""
    if admin:
        try:
            executable = GetExecutableState(path)
            p = path if executable else "cmd"
            a = prm if executable else "/c \"%s\" %s" % (path, prm)
            ret = shell.ShellExecuteEx(
                shellcon.SEE_MASK_NOCLOSEPROCESS, 0, "runas", p, a, workdir)
        except pywintypes.error as e:
            error = str(e)
        # end shellExecuteEx failure
    else:
        try:
            win32api.ShellExecute(0, "open", path, prm, workdir, 1)
        except win32api.error as er:
            error = str(er)
        # end shellExecute failure
    # end admin or not
    if error != "":
        dialog(_("エラー"), _("ファイルを開くことができませんでした(%(error)s)") % {"error": error})
Beispiel #9
0
 def delete(self, event):
     index = self.hListCtrl.GetFocusedItem()
     ext = self.hListCtrl.GetItemText(index, 0)
     if "<default" in ext:
         dialog(_("エラー"), _("デフォルト設定は削除できません。"))
         return
     del (self.config[ext])
     self.hListCtrl.DeleteItem(index)
Beispiel #10
0
    def Initialize(self):
        t = misc.Timer()
        self.identifier = "mainView"  #このビューを表す文字列
        self.log = getLogger("falcon.%s" % self.identifier)
        self.log.debug("created")
        self.app = globalVars.app
        self.events = Events(self, self.identifier)
        title = ""
        if (ctypes.windll.shell32.IsUserAnAdmin()):
            title += "[" + _("管理者") + "]"
        title += constants.APP_NAME
        super().Initialize(
            title, self.app.config.getint(self.identifier, "sizeX", 800, 400),
            self.app.config.getint(self.identifier, "sizeY", 600, 300),
            self.app.config.getint(self.identifier, "positionX", 50, 0),
            self.app.config.getint(self.identifier, "positionY", 50, 0))
        self.menu = Menu()
        self.menu.InitShortcut(self.identifier)

        #お気に入りフォルダと「ここで開く」のショートカットキーを登録
        for target in (globalVars.app.userCommandManagers):
            for v in target.keyMap:
                if target == globalVars.app.openHereCommand:
                    tabs.base.FalconTabBase.selectItemMenuConditions[0].append(
                        target.refHead + v)
                    tabs.base.FalconTabBase.selectItemMenuConditions[2].append(
                        target.refHead + v)
                    tabs.base.FalconTabBase.selectItemTypeMenuConditions[
                        browsableObjects.File].append(target.refHead + v)
                    tabs.base.FalconTabBase.selectItemTypeMenuConditions[
                        browsableObjects.NetworkResource].append(
                            target.refHead + v)
                    tabs.streamList.StreamListTab.blockMenuList.append(
                        target.refHead + v)
                self.menu.keymap.add(self.identifier, target.refHead + v,
                                     target.keyMap[v])
        errors = self.menu.keymap.GetError(self.identifier)
        if errors:
            tmp = _(
                "お気に入りディレクトリもしくは「ここで開く」で設定されたショートカットキーが正しくありません。キーが重複しているか、存在しないキー名を指定しています。以下のキーの設定内容をご確認ください。\n\n"
            )
            for v in errors:
                tmp += v + "\n"
            dialog(_("エラー"), tmp)

        self.InstallMenuEvent(self.menu, self.events)

        self.tabs = []
        self.activeTab = None  #最初なので空
        self.hTabCtrl = self.creator.tabCtrl(_("タブ選択"), self.ChangeTab, 0, 1,
                                             wx.EXPAND)
        self.MakeFirstTab()
        self.hFrame.Bind(wx.EVT_CLOSE, self.OnClose)
        self.hFrame.Show()
        self.app.SetTopWindow(self.hFrame)
        self.log.debug("Finished creating main view (%f seconds)" % t.elapsed)
        return True
Beispiel #11
0
    def initialize(self):
        _import()
        """アプリを初期化する。"""
        self.setGlobalVars()

        self.proxyEnviron = proxyUtil.virtualProxyEnviron()
        self.setProxyEnviron()
        self.installThreadExcepthook()
        # update関係を準備
        if self.config.getboolean("general", "update"):
            globalVars.update.update(True)
        self.hMainView = main.MainView()
        if self.config.getboolean(self.hMainView.identifier, "maximized",
                                  False):
            self.hMainView.hFrame.Maximize()
        self.hMainView.Show()
        # sessions.dat対応
        if self.config.getint("general", "fileVersion", 100) == 100:
            if os.path.exists(constants.SESSION_FILE_NAME):
                try:
                    os.remove(constants.SESSION_FILE_NAME)
                    self.log.debug("File %s deleted." %
                                   constants.SESSION_FILE_NAME)
                except Exception as e:
                    self.log.error("Failed to delete file %s: e" %
                                   constants.SESSION_FILE_NAME)
            self.config["general"]["fileVersion"] = 101
        self.accountManager = twitcasting.accountManager.AccountManager()
        self.hasAccountIssue = False
        self.Manager = manager.manager(self.hMainView)
        self.postItem = twitcasting.postItem.PostItem()
        if len(self.accountManager.tokens) == 0:
            simpleDialog.dialog(
                _("アカウント登録"),
                _("アカウントが登録されていません。ライブに接続する前に、設定メニューのアカウントマネージャからアカウントの登録を行ってください。"
                  ))
            self.hasAccountIssue = True
            return True
        for i in self.accountManager.tokens:
            if datetime.datetime.now().timestamp() > i["expires_at"]:
                simpleDialog.dialog(
                    _("アカウントの再登録"),
                    _("期限が切れたトークンが見つかりました。設定メニューのアカウントマネージャから、再度アカウントの追加を行ってください。"
                      ))
                self.accountManager.deleteAccount(
                    self.accountManager.tokens.index(i))
                self.hasAccountIssue = True
        self.accountManager.removeUnavailableTokens()
        if len(sys.argv) == 2:
            self.hMainView.Clear()
            self.Manager.connect(sys.argv[1])
            return True
        if self.hasAccountIssue == False and self.config.getboolean(
                "general", "autoconnect", True) == True:
            self.hMainView.events.connect()
            return True
Beispiel #12
0
	def InitShortcut(self,identifier):
		self.keymap=keymap.KeymapHandler(defaultKeymap.defaultKeymap)
		self.keymap_identifier=identifier
		self.keymap.addFile(constants.KEYMAP_FILE_NAME)
		errors=self.keymap.GetError(identifier)
		if errors:
			tmp=_(constants.KEYMAP_FILE_NAME+"で設定されたショートカットキーが正しくありません。キーが重複しているか、存在しないキー名を指定しています。以下のキーの設定内容をご確認ください。\n\n")
			for v in errors:
				tmp+=v+"\n"
			dialog(_("エラー"),tmp)
Beispiel #13
0
 def ShowVersionInfo(self):
     """バージョン情報を表示する。"""
     dialog(
         _("バージョン情報"),
         _("%(app)s Version %(ver)s.\nCopyright (C) %(year)s %(names)s") % {
             "app": constants.APP_NAME,
             "ver": constants.APP_VERSION,
             "year": constants.APP_COPYRIGHT_YEAR,
             "names": constants.APP_DEVELOPERS
         })
Beispiel #14
0
	def OkButtonEvent(self,event):
		"""
			OKボタン押下時のイベント処理。
			iniファイル保存時のキーとなる先頭要素が空欄でないか、半角の=を含んでいないかバリデーションする。
			問題なければValidation()を呼び出す。
		"""
		key=self.edits[0].GetLineText(0)
		if key=="" or "=" in key:
			dialog(_("エラー"),_("%sを空白や半角の=を含む値に設定することはできません。") % self.valueNames[0][0])
			return
		return self.Validation(event)
Beispiel #15
0
 def GoForward(self, stream=False, admin=False):
     """forward アクションを実行。stream=True で、ファイルを開く代わりにストリームを開く。admin=True で、管理者モード。"""
     p = self.parent
     st = True if stream else False
     ret = p.activeTab.GoForward(st, admin)
     if issubclass(ret.__class__, tabs.base.FalconTabBase):
         p.ReplaceCurrentTab(ret)
     if ret == errorCodes.NOT_SUPPORTED:
         dialog(_("エラー"), _("このオペレーションはサポートされていません。"))
     elif ret == errorCodes.BOUNDARY:
         dialog("test", "mada")
Beispiel #16
0
 def GoBackward(self):
     """back アクションを実行"""
     p = self.parent
     ret = p.activeTab.GoBackward()
     if issubclass(ret.__class__, tabs.base.FalconTabBase):
         p.ReplaceCurrentTab(ret)
     if ret == errorCodes.NOT_SUPPORTED:
         dialog(_("エラー"), _("このオペレーションはサポートされていません。"))
     elif ret == errorCodes.BOUNDARY:
         globalVars.app.PlaySound(
             globalVars.app.config["sounds"]["boundary"])
Beispiel #17
0
 def Validation(self, event):
     if self.edits[0].GetLineText(0) == "" or self.edits[1].GetLineText(
             0) == "":
         return
     path = os.path.expandvars(self.edits[1].GetLineText(0))
     if not os.path.isabs(path):
         dialog(_("エラー"), _("パスは絶対パスで指定してください。"))
         return
     if not os.path.isdir(path):
         dialog(_("エラー"), _("入力されたパスが存在しません。有効なディレクトリへのパスであることを確認してください。"))
         return
     event.Skip()
Beispiel #18
0
 def AddUserCommandKey(self):
     # お気に入りフォルダと「ここで開く」のショートカットキーを登録
     for target in (globalVars.app.userCommandManagers):
         for v in target.keyMap:
             if target.keyMap[v] != "":  # キーが指定されていない場合は無視
                 self.menu.keymap.add(self.identifier, target.refHead + v, target.keyMap[v])
     errors = self.menu.keymap.GetError(self.identifier)
     if errors:
         tmp = _("お気に入りディレクトリもしくは「ここで開く」で設定されたショートカットキーが正しくありません。キーが重複しているか、存在しないキー名を指定しています。以下のキーの設定内容をご確認ください。\n\n")
         for v in errors:
             tmp += v + "\n"
         dialog(_("エラー"), tmp)
Beispiel #19
0
 def OKButtonEvent(self, event):
     if self.extensionEdit.GetLineText(
             0) == "" or self.pathEdit.GetLineText(0) == "":
         return
     if not re.match("^[a-zA-Z0-9\\-$~]+$",
                     self.extensionEdit.GetLineText(0)):
         dialog(_("エラー"), _("入力された拡張子に利用できない文字が含まれています。パスを確認してください。"))
         return
     if not os.path.isfile(self.pathEdit.GetLineText(0)):
         dialog(_("エラー"), _("入力された実行ファイルが存在しません。パスを確認してください。"))
         return
     event.Skip()
Beispiel #20
0
 def InitShortcut(self):
     self.keymap = keymap.KeymapHandler(None, self.keyFilter)
     if self.keymap.addFile(constants.KEYMAP_FILE_NAME) != errorCodes.OK:
         self.keymap.addDict(defaultKeymap.defaultKeymap)
         self.keymap.SaveFile(constants.KEYMAP_FILE_NAME)
     errors = self.keymap.GetError(self.keymap_identifier)
     if errors:
         tmp = _(
             constants.KEYMAP_FILE_NAME +
             "で設定されたショートカットキーが正しくありません。キーの重複、存在しないキー名の指定、使用できないキーパターンの指定などが考えられます。以下のキーの設定内容をご確認ください。\n\n"
         )
         for v in errors:
             tmp += v + "\n"
         dialog(_("エラー"), tmp)
Beispiel #21
0
 def postItem(self, account, item, count):
     counter = 0
     for i in range(count):
         if self._postItem(account, item):
             counter += 1
     if counter == 0:
         simpleDialog.errorDialog(_("アイテムの投下に失敗しました。"))
         return
     simpleDialog.dialog(
         _("完了"),
         _("%(name)sを%(count)d個投下しました。") % {
             "name": item.name,
             "count": counter
         })
Beispiel #22
0
 def addFollowingUsers(self):
     from views import chooseTwitterAccount
     d = chooseTwitterAccount.Dialog(self.tokenManager)
     d.Initialize()
     if d.Show() == wx.ID_CANCEL:
         return
     user = d.GetData()
     users = self.getFollowingUsers(user, user)
     count = 0
     for i in users:
         if str(i.id) in self.users.getUserIds():
             continue
         count += 1
         self.users.addUser(str(i.id), i.username, i.name, i.protected)
     simpleDialog.dialog(_("完了"), _("フォロー中のユーザの追加が完了しました。追加件数:%d") % count)
Beispiel #23
0
 def toggleCustomUrlScheme(self):
     if not customUrlScheme.isRegistered(constants.SCHEME_NAME):
         if not hasattr(sys, "frozen"):
             simpleDialog.errorDialog(
                 _("この機能を使用するには、TCVをビルドして実行する必要があります。"))
             return
         if customUrlScheme.register(constants.SCHEME_NAME):
             simpleDialog.dialog(_("成功"), _("カスタムURLスキームの登録が完了しました。"))
         else:
             simpleDialog.errorDialog(_("カスタムURLスキームの登録に失敗しました。"))
     else:
         d = simpleDialog.yesNoDialog(_("確認"), _("既に登録されています。登録を解除しますか?"))
         if d == wx.ID_NO:
             return
         customUrlScheme.unregister(constants.SCHEME_NAME)
Beispiel #24
0
 def applyHotKey(self):
     self.hotkey = hotkeyHandler.HotkeyHandler(
         None,
         hotkeyHandler.HotkeyFilter().SetDefault())
     if self.hotkey.addFile(constants.KEYMAP_FILE_NAME,
                            ["HOTKEY"]) == errorCodes.OK:
         errors = self.hotkey.GetError("HOTKEY")
         if errors:
             tmp = _(
                 constants.KEYMAP_FILE_NAME +
                 "で設定されたホットキーが正しくありません。キーの重複、存在しないキー名の指定、使用できないキーパターンの指定などが考えられます。以下のキーの設定内容をご確認ください。\n\n"
             )
             for v in errors:
                 tmp += v + "\n"
             dialog(_("エラー"), tmp)
         self.hotkey.Set("HOTKEY", self.hFrame)
Beispiel #25
0
	def keyDialog(self,no):
		#フィルタに引っかかるものが既に設定されている場合、その変更は許さない
		before=self.edits[no].GetLineText(0)
		if before!=_("なし"):
			if not self.filter.Check(before):
				errorDialog(_("このショートカットは変更できません。"),self.wnd)
				return
		d=views.keyConfig.Dialog(self.wnd,self.filter)
		d.Initialize()
		if d.Show()==wx.ID_CANCEL:
			dialog(_("設定完了"), _("解除しました。"),self.wnd)
			self.edits[no].SetValue(_("なし"))
		else:
			dialog(_("設定完了"), _("%s に設定しました。") % (d.GetValue()),self.wnd)
			self.edits[no].SetValue(d.GetValue())
		return
Beispiel #26
0
    def Initialize(self, path, silent=False):
        """リソースの情報を取得し、リストを初期化する。"""
        self.log.debug("Getting resources list...")
        self.rootDirectory = path
        t = misc.Timer()
        if isinstance(
                path, list
        ):  # パラメータがリストなら、browsableObjects のリストとして処理刷る(ファイルリストを取得しないでコピーする)
            self.resources += path
            return errorCodes.OK
        # end copy
        self.resources.clear()
        if not silent:
            globalVars.app.say(path[2:])

        # 取得対象を構造体にセット
        rootResource = win32wnet.NETRESOURCE()
        rootResource.lpRemoteName = path

        # リソースリストの取得
        try:
            h = win32wnet.WNetOpenEnum(2, 1, 0, rootResource)
            # 2=RESOURCE_GLOBALNET
            # 1=RESOURCETYPE_DISK
            lst = win32wnet.WNetEnumResource(h, 64)  # 65以上の指定不可
            win32wnet.WNetCloseEnum(h)
        except win32wnet.error as er:
            dialog(
                _("エラー"),
                _("ネットワーク上のリソース一覧を取得できませんでした(%(error)s)") % {"error": str(er)})
            return errorCodes.ACCESS_DENIED

        for l in lst:
            ret, shfileinfo = shell.SHGetFileInfo(l.lpRemoteName, 0,
                                                  shellcon.SHGFI_ICON)
            s = browsableObjects.NetworkResource()
            self.log.debug("network resource found and check IP address:" +
                           l.lpRemoteName[2:])
            s.Initialize(l.lpRemoteName[len(path) + 1:], l.lpRemoteName, "",
                         shfileinfo[0])
            self.resources.append(s)

        self.log.debug("Network resource list created in %d seconds." %
                       t.elapsed)
        self.log.debug(str(len(self.resources)) + " resources found.")
        return errorCodes.OK
Beispiel #27
0
 def Search(self):
     basePath = self.parent.activeTab.listObject.rootDirectory
     out_lst = []  #入力画面が出てるときに、もうファイルリスト取得を開始してしまう
     task = workerThreads.RegisterTask(
         workerThreadTasks.GetRecursiveFileList, {
             'path': basePath,
             'out_lst': out_lst,
             'eol': True
         })
     d = views.search.Dialog(basePath)
     d.Initialize()
     canceled = False
     while (True):
         ret = d.Show()
         if ret == wx.ID_CANCEL:
             task.Cancel()
             canceled = True
             break
         #end キャンセルして抜ける
         val = d.GetValue()
         if val['isRegularExpression']:
             ret = misc.ValidateRegularExpression(val['keyword'])
             if ret != "OK":
                 dialog(
                     _("エラー"),
                     _("正規表現の文法が間違っています。\nエラー内容: %(error)s") %
                     {'error': ret})
                 continue
             #end 正規表現違う
         #end 正規表現モードがオンかどうか
         break
     #end 入力が正しくなるまで
     d.Destroy()
     if canceled: return
     actionstr = "search" if val['type'] == 0 else "grep"
     target = {
         'action': actionstr,
         'basePath': basePath,
         'out_lst': out_lst,
         'keyword': val['keyword'],
         'isRegularExpression': val['isRegularExpression']
     }
     self.parent.Navigate(target, as_new_tab=True)
Beispiel #28
0
    def setToken(self):
        """新しいトークンをセットする
		"""
        manager = implicitGrantManager.ImplicitGrantManager(
            constants.TC_CID, constants.TC_URL, constants.TC_PORT)
        l = "ja"
        try:
            l = globalVars.app.config["general"]["language"].split(
                "_")[0].lower()
        except:
            pass  #end うまく読めなかったら ja を採用
        #end except
        manager.setMessage(
            lang=l,
            success=_("認証に成功しました。このウィンドウを閉じて、アプリケーションに戻ってください。"),
            failed=_("認証に失敗しました。もう一度お試しください。"),
            transfer=_("しばらくしても画面が切り替わらない場合は、別のブラウザでお試しください。"))
        webbrowser.open(manager.getUrl())
        d = views.auth.waitingDialog()
        d.Initialize(_("アカウントの追加"))
        d.Show(False)
        while True:
            time.sleep(0.01)
            wx.YieldIfNeeded()
            if manager.getToken():
                d.Destroy()
                break
            if d.canceled == 1 or manager.getToken() == "":
                simpleDialog.dialog(_("処理結果"), _("キャンセルされました。"))
                manager.shutdown()
                d.Destroy()
                return False
        token = manager.getToken()
        data = {
            "token": base64.b64encode(token["access_token"].encode()),
            "expires": token["expires_at"],
            "next": token["expires_at"] - constants.TOKEN_EXPIRE_MAX,
        }
        with open(constants.AC_TWITCASTING, "wb") as f:
            pickle.dump(data, f)
        simpleDialog.dialog(_("処理結果"), _("認証が完了しました。"))
        self.loadToken()
        return True
Beispiel #29
0
    def initialize(self):
        _import()
        """アプリを初期化する。"""
        self.setGlobalVars()

        self.proxyEnviron = proxyUtil.virtualProxyEnviron()
        self.setProxyEnviron()
        self.installThreadExcepthook()
        # update関係を準備
        if self.config.getboolean("general", "update"):
            globalVars.update.update(True)
        self.hMainView = main.MainView()
        if self.config.getboolean(self.hMainView.identifier, "maximized",
                                  False):
            self.hMainView.hFrame.Maximize()
        self.hMainView.Show()
        self.accountManager = twitcasting.accountManager.AccountManager()
        self.hasAccountIssue = False
        self.Manager = manager.manager(self.hMainView)
        if len(self.accountManager.tokens) == 0:
            simpleDialog.dialog(
                _("アカウント登録"),
                _("アカウントが登録されていません。ライブに接続する前に、設定メニューのアカウントマネージャからアカウントの登録を行ってください。"
                  ))
            self.hasAccountIssue = True
            return True
        for i in self.accountManager.tokens:
            if datetime.datetime.now().timestamp() > i["expires_at"]:
                simpleDialog.dialog(
                    "",
                    _("期限が切れたトークンが見つかりました。設定メニューのアカウントマネージャから、再度アカウントの追加を行ってください。"
                      ))
                self.accountManager.deleteAccount(
                    self.accountManager.tokens.index(i))
                self.hasAccountIssue = True
        if len(sys.argv) == 2:
            self.hMainView.Clear()
            self.Manager.connect(sys.argv[1])
            return True
        if self.hasAccountIssue == False and self.config.getboolean(
                "general", "autoconnect", True) == True:
            self.hMainView.events.connect()
            return True
Beispiel #30
0
 def _getToken(self):
     manager = self._getManager()
     l = "ja"
     try:
         l = globalVars.app.config["general"]["language"].split(
             "_")[0].lower()
     except:
         pass  # end うまく読めなかったら ja を採用
     # end except
     manager.setMessage(
         lang=l,
         success=_("認証に成功しました。このウィンドウを閉じて、アプリケーションに戻ってください。"),
         failed=_("認証に失敗しました。もう一度お試しください。"),
         transfer=_("しばらくしても画面が切り替わらない場合は、別のブラウザでお試しください。"))
     webbrowser.open(manager.getUrl())
     d = views.auth.waitingDialog()
     d.Initialize(_("Twitterアカウント認証"))
     d.Show(False)
     self.log.debug("start authorization")
     while True:
         time.sleep(0.01)
         wx.YieldIfNeeded()
         if manager.getToken():
             self.log.debug("accepted")
             d.Destroy()
             break
         if d.canceled == 1 or manager.getToken() == "":
             self.log.debug("canceled")
             simpleDialog.dialog(_("処理結果"), _("キャンセルされました。"))
             manager.shutdown()
             d.Destroy()
             return
         self.log.debug("waiting for browser operation...")
     user = self._getUser(manager)
     token = manager.getData()
     self._data[user["id"]] = {
         "user": user,
         "token": token,
         "default": False,
     }
     manager.shutdown()
     return manager.getToken()