Else
dmTab.Add(post.Id, post.IsRead, True)
If dmTab.Notify Then _notifyPosts.Add(post)
- _soundFile = dmTab.SoundFile
+ If dmTab.SoundFile <> "" Then _soundFile = dmTab.SoundFile
+ End If
+ Next
+ For Each tn As String In _tabs.Keys
+ If _tabs(tn).TabType = TabUsageType.PublicSearch Then
+ If _tabs(tn).GetTemporaryPosts.Length > 0 Then
+ For Each post As PostClass In _tabs(tn).GetTemporaryPosts
+ _notifyPosts.Add(post)
+ Next
+ If _soundFile = "" AndAlso _tabs(tn).SoundFile <> "" Then _soundFile = _tabs(tn).SoundFile
+ End If
End If
Next
End Sub
If Item.IsFav AndAlso _retweets.ContainsKey(Item.Id) Then
Exit Sub 'Fav済みのRetweet元発言は追加しない
End If
+ If _addedIds Is Nothing Then _addedIds = New List(Of Long) 'タブ追加用IDコレクション準備
+ _addedIds.Add(Item.Id)
Else
'公式検索の場合
Dim tb As TabClass
If tb.Contains(Item.Id) Then Exit Sub
tb.Add(Item.Id, Item.IsRead, True)
End If
- If _addedIds Is Nothing Then _addedIds = New List(Of Long) 'タブ追加用IDコレクション準備
- _addedIds.Add(Item.Id)
End SyncLock
End Sub
Private _unreadCount As Integer = 0
Private _ids As List(Of Long)
Private _filterMod As Boolean = False
- Private _tmpIds As List(Of TempolaryId)
+ Private _tmpIds As List(Of TemporaryId)
Private _tabName As String = ""
Private _tabType As TabUsageType = TabUsageType.Undefined
Private _searchedPosts As Dictionary(Of Long, PostClass)
Return _searchedPosts(Id)
End Function
- Private Structure TempolaryId
+ Public Function GetTemporaryPosts() As PostClass()
+ Dim tempPosts As New List(Of PostClass)
+ If _tmpIds Is Nothing OrElse _tmpIds.Count = 0 Then Return tempPosts.ToArray
+ For Each tempId As TemporaryId In _tmpIds
+ tempPosts.Add(_searchedPosts(tempId.Id))
+ Next
+ Return tempPosts.ToArray
+ End Function
+
+ Private Structure TemporaryId
Public Id As Long
Public Read As Boolean
If Not Temporary Then
Me.Add(ID, Read)
Else
- If _tmpIds Is Nothing Then _tmpIds = New List(Of TempolaryId)
- _tmpIds.Add(New TempolaryId(ID, Read))
+ If _tmpIds Is Nothing Then _tmpIds = New List(Of TemporaryId)
+ _tmpIds.Add(New TemporaryId(ID, Read))
End If
End Sub
'Try
' rwLock.AcquireReaderLock(System.Threading.Timeout.Infinite) '読み取りロック取得
+ If Me.TabType = TabUsageType.PublicSearch Then Return HITRESULT.None
+
Dim rslt As HITRESULT = HITRESULT.None
'全フィルタ評価(優先順位あり)
For Each ft As FiltersClass In _filters
Next
If rslt <> HITRESULT.None Then
- If _tmpIds Is Nothing Then _tmpIds = New List(Of TempolaryId)
- _tmpIds.Add(New TempolaryId(ID, Read))
+ If _tmpIds Is Nothing Then _tmpIds = New List(Of TemporaryId)
+ _tmpIds.Add(New TemporaryId(ID, Read))
End If
'Me.Add(ID, Read)
End Function
'検索結果の追加
- Public Sub AddPostToInnerStrage(ByVal Post As PostClass)
+ Public Sub AddPostToInnerStorage(ByVal Post As PostClass)
If _searchedPosts Is Nothing Then _searchedPosts = New Dictionary(Of Long, PostClass)
If _searchedPosts.ContainsKey(Post.Id) Then Exit Sub
_searchedPosts.Add(Post.Id, Post)
- If _tmpIds Is Nothing Then _tmpIds = New List(Of TempolaryId)
- _tmpIds.Add(New TempolaryId(Post.Id, Post.IsRead))
+ If _tmpIds Is Nothing Then _tmpIds = New List(Of TemporaryId)
+ _tmpIds.Add(New TemporaryId(Post.Id, Post.IsRead))
End Sub
Public Sub AddSubmit()
If _tmpIds Is Nothing Then Exit Sub
- For Each tId As TempolaryId In _tmpIds
+ For Each tId As TemporaryId In _tmpIds
Me.Add(tId.Id, tId.Read)
Next
_tmpIds.Clear()
If IsNetworkAvailable() Then
If SettingDialog.StartupFollowers Then
'_waitFollower = True
- GetTimeline(WORKERTYPE.Follower, 0, 0)
+ GetTimeline(WORKERTYPE.Follower, 0, 0, "")
End If
End If
'If SettingDialog.TimelinePeriodInt > 0 Then TimerTimeline.Enabled = True
'If SettingDialog.ReplyPeriodInt > 0 Then TimerReply.Enabled = True
Else
- GetTimeline(WORKERTYPE.DirectMessegeRcv, 1, 0)
+ GetTimeline(WORKERTYPE.DirectMessegeRcv, 1, 0, "")
End If
Else
_myStatusOnline = False
If Not IsNetworkAvailable() Then Exit Sub
- GetTimeline(WORKERTYPE.Timeline, 1, 0)
+ GetTimeline(WORKERTYPE.Timeline, 1, 0, "")
End Sub
Private Sub TimerDM_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerDM.Tick
If Not IsNetworkAvailable() Then Exit Sub
- GetTimeline(WORKERTYPE.DirectMessegeRcv, 1, 0)
+ GetTimeline(WORKERTYPE.DirectMessegeRcv, 1, 0, "")
End Sub
Private Sub TimerReply_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerReply.Tick
If Not IsNetworkAvailable() Then Exit Sub
- GetTimeline(WORKERTYPE.Reply, 1, 0)
+ GetTimeline(WORKERTYPE.Reply, 1, 0, "")
End Sub
Private Sub RefreshTimeline()
ret = Twitter.GetFavorites(args.page, read, args.endPage, args.type, rslt.newDM)
End If
rslt.addCount = _statuses.DistributePosts()
+ Case WORKERTYPE.PublicSearch
+ bw.ReportProgress(50, MakeStatusMessage(args, False))
+ ret = Twitter.GetSearch(read, args.tName)
+ '新着時未読クリア
+ rslt.addCount = _statuses.DistributePosts()
End Select
'キャンセル要求
If bw.CancellationPending Then
End If
End If
If rslt.newDM Then
- GetTimeline(WORKERTYPE.DirectMessegeRcv, 1, 0)
+ GetTimeline(WORKERTYPE.DirectMessegeRcv, 1, 0, "")
End If
Else
'API使用時の取得調整は別途考える(カウント調整?)
Case WORKERTYPE.Reply
_waitReply = False
If rslt.newDM AndAlso Not _initial Then
- GetTimeline(WORKERTYPE.DirectMessegeRcv, 1, 0)
+ GetTimeline(WORKERTYPE.DirectMessegeRcv, 1, 0, "")
End If
Case WORKERTYPE.Favorites
_waitFav = False
_hisIdx = _history.Count - 1
SetMainWindowTitle()
End If
- If rslt.retMsg.Length = 0 AndAlso SettingDialog.PostAndGet Then GetTimeline(WORKERTYPE.Timeline, 1, 0)
+ If rslt.retMsg.Length = 0 AndAlso SettingDialog.PostAndGet Then GetTimeline(WORKERTYPE.Timeline, 1, 0, "")
Case WORKERTYPE.Retweet
If rslt.retMsg.Length > 0 Then
StatusLabel.Text = rslt.retMsg
End If
Next
End If
- If rslt.retMsg.Length = 0 AndAlso SettingDialog.PostAndGet Then GetTimeline(WORKERTYPE.Timeline, 1, 0)
+ If rslt.retMsg.Length = 0 AndAlso SettingDialog.PostAndGet Then GetTimeline(WORKERTYPE.Timeline, 1, 0, "")
Case WORKERTYPE.Follower
'_waitFollower = False
_itemCache = Nothing
End Sub
- Private Sub GetTimeline(ByVal WkType As WORKERTYPE, ByVal fromPage As Integer, ByVal toPage As Integer)
+ Private Sub GetTimeline(ByVal WkType As WORKERTYPE, ByVal fromPage As Integer, ByVal toPage As Integer, ByVal tabName As String)
'toPage=0:通常モード
If Not IsNetworkAvailable() Then Exit Sub
- 'タイマー停止
- If SettingDialog.UseAPI Then
- Select Case WkType
- Case WORKERTYPE.Timeline
- 'TimerTimeline.Enabled = False
- Case WORKERTYPE.Reply
- 'TimerReply.Enabled = False
- Case WORKERTYPE.DirectMessegeRcv, WORKERTYPE.DirectMessegeSnt
- 'TimerDM.Enabled = False
- End Select
- Else
- Select Case WkType
- Case WORKERTYPE.Timeline
- 'TimerTimeline.Enabled = False
- Case WORKERTYPE.Reply
- 'TimerReply.Enabled = False
- Case WORKERTYPE.DirectMessegeRcv, WORKERTYPE.DirectMessegeSnt
- 'TimerDM.Enabled = False
- End Select
- End If
+ ''タイマー停止
+ 'If SettingDialog.UseAPI Then
+ ' Select Case WkType
+ ' Case WORKERTYPE.Timeline
+ ' 'TimerTimeline.Enabled = False
+ ' Case WORKERTYPE.Reply
+ ' 'TimerReply.Enabled = False
+ ' Case WORKERTYPE.DirectMessegeRcv, WORKERTYPE.DirectMessegeSnt
+ ' 'TimerDM.Enabled = False
+ ' End Select
+ 'Else
+ ' Select Case WkType
+ ' Case WORKERTYPE.Timeline
+ ' 'TimerTimeline.Enabled = False
+ ' Case WORKERTYPE.Reply
+ ' 'TimerReply.Enabled = False
+ ' Case WORKERTYPE.DirectMessegeRcv, WORKERTYPE.DirectMessegeSnt
+ ' 'TimerDM.Enabled = False
+ ' End Select
+ 'End If
'非同期実行引数設定
Dim args As New GetWorkerArg
args.page = fromPage
args.endPage = toPage
args.type = WkType
+ args.tName = tabName
RunAsync(args)
Not _initial AndAlso _
WkType = WORKERTYPE.Timeline AndAlso _
SettingDialog.CheckReply Then
- TimerReply.Enabled = False
+ 'TimerReply.Enabled = False
Dim _args As New GetWorkerArg
_args.page = fromPage
_args.endPage = toPage
If _curTab IsNot Nothing Then
Select Case _statuses.Tabs(_curTab.Text).TabType
Case TabUsageType.Mentions
- GetTimeline(WORKERTYPE.Reply, 1, 0)
+ GetTimeline(WORKERTYPE.Reply, 1, 0, "")
Case TabUsageType.DirectMessage
- GetTimeline(WORKERTYPE.DirectMessegeRcv, 1, 0)
+ GetTimeline(WORKERTYPE.DirectMessegeRcv, 1, 0, "")
Case TabUsageType.Favorites
- GetTimeline(WORKERTYPE.Favorites, 1, 0)
+ GetTimeline(WORKERTYPE.Favorites, 1, 0, "")
'Case TabUsageType.Profile
'' TODO
'Case TabUsageType.PublicSearch
'' TODO
Case Else
- GetTimeline(WORKERTYPE.Timeline, 1, 0)
+ GetTimeline(WORKERTYPE.Timeline, 1, 0, "")
End Select
Else
- GetTimeline(WORKERTYPE.Timeline, 1, 0)
+ GetTimeline(WORKERTYPE.Timeline, 1, 0, "")
End If
End Sub
''' 検索関連の準備
- Dim pnl As New Panel
- Dim lbl As New Label
- Dim cmb As New ComboBox
- Dim btn As New Button
- pnl.SuspendLayout()
-
- pnl.Controls.Add(cmb)
- pnl.Controls.Add(btn)
- pnl.Controls.Add(lbl)
- pnl.Name = "panel1"
- pnl.Dock = DockStyle.Top
- pnl.Height = cmb.Height
-
- lbl.Text = "検索"
- lbl.Name = "label1"
- lbl.Dock = DockStyle.Left
- lbl.Width = 50
- lbl.Height = cmb.Height
- lbl.TextAlign = ContentAlignment.MiddleLeft
-
- btn.Text = "button1"
- btn.Name = "button1"
- btn.UseVisualStyleBackColor = True
- btn.Dock = DockStyle.Right
-
- cmb.Text = ""
- cmb.Dock = DockStyle.Fill
- cmb.Name = "combo1"
-
-
-
-
-
-
-
-
-
-
-
-
+ Dim pnl As Panel = Nothing
+ If tabType = TabUsageType.PublicSearch Then
+ pnl = New Panel
+
+ Dim lbl As Label
+ Dim cmb As ComboBox
+ Dim btn As Button
+
+ lbl = New Label
+ cmb = New ComboBox
+ btn = New Button
+ pnl.SuspendLayout()
+
+ pnl.Controls.Add(cmb)
+ pnl.Controls.Add(btn)
+ pnl.Controls.Add(lbl)
+ pnl.Name = "panelSearch"
+ pnl.Dock = DockStyle.Top
+ pnl.Height = cmb.Height
+
+ lbl.Text = "PublicSearch"
+ lbl.Name = "label1"
+ lbl.Dock = DockStyle.Left
+ lbl.Width = 50
+ lbl.Height = cmb.Height
+ lbl.TextAlign = ContentAlignment.MiddleLeft
+
+ btn.Text = "Search"
+ btn.Name = "buttonSearch"
+ btn.UseVisualStyleBackColor = True
+ btn.Dock = DockStyle.Right
+ AddHandler btn.Click, AddressOf SearchButton_Click
+
+ cmb.Text = ""
+ cmb.Dock = DockStyle.Fill
+ cmb.Name = "comboSearch"
+ 'cmb.Items.Add("")
+ 'cmb.Items.Add("ja")
+ 'cmb.Items.Add("en")
+ 'cmb.Items.Add("ar")
+ 'cmb.Items.Add("da")
+ 'cmb.Items.Add("nl")
+ 'cmb.Items.Add("fa")
+ 'cmb.Items.Add("fi")
+ 'cmb.Items.Add("fr")
+ 'cmb.Items.Add("de")
+ 'cmb.Items.Add("hu")
+ 'cmb.Items.Add("is")
+ 'cmb.Items.Add("it")
+ 'cmb.Items.Add("no")
+ 'cmb.Items.Add("pl")
+ 'cmb.Items.Add("pt")
+ 'cmb.Items.Add("ru")
+ 'cmb.Items.Add("es")
+ 'cmb.Items.Add("sv")
+ 'cmb.Items.Add("th")
+ End If
Me.ListTab.Controls.Add(_tabPage)
_tabPage.Controls.Add(_listCustom)
- _tabPage.Controls.Add(pnl)
+
+ If tabType = TabUsageType.PublicSearch Then _tabPage.Controls.Add(pnl)
+
_tabPage.Location = New Point(4, 4)
_tabPage.Name = "CTab" + cnt.ToString()
_tabPage.Size = New Size(380, 260)
- pnl.ResumeLayout(False)
+ If tabType = TabUsageType.PublicSearch Then pnl.ResumeLayout(False)
_tabPage.ResumeLayout(False)
SetListProperty() '他のタブに列幅等を反映
+ Dim tabType As TabUsageType = _statuses.Tabs(TabName).TabType
+
'オブジェクトインスタンスの削除
Me.SplitContainer1.Panel1.SuspendLayout()
Me.SplitContainer1.Panel2.SuspendLayout()
_tabPage.SuspendLayout()
Me.ListTab.Controls.Remove(_tabPage)
+
+ Dim pnl As Control = Nothing
+ If tabType = TabUsageType.PublicSearch Then
+ pnl = _tabPage.Controls("panelSearch")
+ For Each ctrl As Control In pnl.Controls
+ If ctrl.Name = "buttonSearch" Then
+ RemoveHandler ctrl.Click, AddressOf SearchButton_Click
+ End If
+ pnl.Controls.Remove(ctrl)
+ ctrl.Dispose()
+ Next
+ _tabPage.Controls.Remove(pnl)
+ End If
+
_tabPage.Controls.Remove(_listCustom)
_listCustom.Columns.Clear()
_listCustom.ContextMenuStrip = Nothing
If IsNetworkAvailable() Then
If SettingDialog.ReadPages > 0 Then
_waitTimeline = True
- GetTimeline(WORKERTYPE.Timeline, 1, SettingDialog.ReadPages)
+ GetTimeline(WORKERTYPE.Timeline, 1, SettingDialog.ReadPages, "")
End If
If SettingDialog.ReadPagesReply > 0 Then
_waitReply = True
- GetTimeline(WORKERTYPE.Reply, 1, SettingDialog.ReadPagesReply)
+ GetTimeline(WORKERTYPE.Reply, 1, SettingDialog.ReadPagesReply, "")
End If
If SettingDialog.ReadPagesDM > 0 Then
_waitDm = True
- GetTimeline(WORKERTYPE.DirectMessegeRcv, 1, SettingDialog.ReadPagesDM)
+ GetTimeline(WORKERTYPE.DirectMessegeRcv, 1, SettingDialog.ReadPagesDM, "")
End If
If SettingDialog.GetFav Then
_waitFav = True
- GetTimeline(WORKERTYPE.Favorites, 1, 1)
+ GetTimeline(WORKERTYPE.Favorites, 1, 1, "")
End If
Dim i As Integer = 0
Do While (_waitTimeline OrElse _waitReply OrElse _waitDm OrElse _waitFav) AndAlso Not _endingFlag
End Sub
Private Sub doGetFollowersMenu(ByVal CacheInvalidate As Boolean)
- GetTimeline(WORKERTYPE.Follower, 1, 0)
+ GetTimeline(WORKERTYPE.Follower, 1, 0, "")
'Try
' StatusLabel.Text = My.Resources.UpdateFollowersMenuItem1_ClickText1
' My.Application.DoEvents()
End If
End Sub
+ Private Sub SearchButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
+ Dim pnl As Control = DirectCast(Me, Control).Parent
+ If pnl Is Nothing Then Exit Sub
+ Dim tbName As String = pnl.Parent.Text
+ Dim tb As TabClass = _statuses.Tabs(tbName)
+ tb.SearchWords = pnl.Controls("comboSearch").Text
+ Dim lst As DetailsListView = DirectCast(pnl.Parent.Tag, DetailsListView)
+ lst.VirtualListSize = 0
+ lst.Items.Clear()
+
+ GetTimeline(WORKERTYPE.PublicSearch, 1, 0, tbName)
+ End Sub
End Class