diff --git a/SCrawler/Channels/ChannelViewForm.vb b/SCrawler/Channels/ChannelViewForm.vb index 7e776ee..b8b875a 100644 --- a/SCrawler/Channels/ChannelViewForm.vb +++ b/SCrawler/Channels/ChannelViewForm.vb @@ -20,7 +20,7 @@ Imports ADB = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons Imports RButton = PersonalUtilities.Forms.Toolbars.RangeSwitcherToolbar.ControlItem Friend Class ChannelViewForm : Implements IChannelLimits #Region "Events" - Friend Event OnUsersAdded(ByVal StartIndex As Integer) + Friend Event OnUsersAdded As UsersAddedEventHandler Friend Event OnDownloadDone As NotificationEventHandler #End Region #Region "Appended user structure" diff --git a/SCrawler/Download/Feed/DownloadFeedForm.vb b/SCrawler/Download/Feed/DownloadFeedForm.vb index 436b0ed..9abf652 100644 --- a/SCrawler/Download/Feed/DownloadFeedForm.vb +++ b/SCrawler/Download/Feed/DownloadFeedForm.vb @@ -16,6 +16,9 @@ Imports UserMediaD = SCrawler.DownloadObjects.TDownloader.UserMediaD Imports DTSModes = PersonalUtilities.Forms.DateTimeSelectionForm.Modes Namespace DownloadObjects Friend Class DownloadFeedForm +#Region "Events" + Friend Event UsersAdded As UsersAddedEventHandler +#End Region #Region "Declarations" Private Const FeedTitleDefault As String = "Feed" Private WithEvents MyDefs As DefaultFormOptions @@ -495,13 +498,15 @@ Namespace DownloadObjects Private Sub BTT_COPY_MOVE_TO_Click(sender As Object, e As EventArgs) Handles BTT_COPY_TO.Click, BTT_MOVE_TO.Click MoveCopyFiles(True, sender, Nothing, Nothing) End Sub - Private Function MoveCopyFiles(ByVal IsInternal As Boolean, ByVal Sender As Object, ByVal NewDestination As SFile, ByVal FeedMediaFile As SFile) As Boolean + Private Function MoveCopyFiles(ByVal IsInternal As Boolean, ByVal Sender As Object, ByVal MCTOptions As FeedMoveCopyTo, ByVal FeedMediaData As FeedMedia) As Boolean Const MsgTitle$ = "Copy/Move checked files" Try Dim isCopy As Boolean = Not Sender Is Nothing AndAlso Sender Is BTT_COPY_TO - Dim dest As SFile = Nothing + Dim moveOptions As FeedMoveCopyTo = Nothing Dim ff As SFile = Nothing, df As SFile - Dim files As IEnumerable(Of SFile) = Nothing + Dim data As IEnumerable(Of UserMediaD) = Nothing + Dim dd As UserMediaD + Dim data_files As IEnumerable(Of SFile) = Nothing Dim mm As UserMediaD Dim mm_data As API.Base.UserMedia Dim indx% @@ -514,42 +519,91 @@ Namespace DownloadObjects Dim sesFile As SFile Dim sesFilesReplaced As Boolean = False Dim filesReplace As New List(Of KeyValuePair(Of SFile, SFile)) - Dim updateFileLocations As Boolean = Settings.FeedUpdateFileLocationOnMove + Dim updateFileLocations As Boolean = Settings.FeedMoveCopyUpdateFileLocationOnMove Dim result As Boolean = False - If FeedMediaFile.IsEmptyString Then - With GetCheckedMedia() - If .ListExists Then files = .Select(Function(m) m.Data.File) + If FeedMediaData Is Nothing Then + data = GetCheckedMedia() + With data + If .ListExists Then data_files = .Select(Function(m) m.Data.File) End With Else - files = {FeedMediaFile} + data = {FeedMediaData.Media} + data_files = {FeedMediaData.File} End If - If files.ListExists Then - If NewDestination.IsEmptyString Then - Using f As New FeedCopyToForm(files, isCopy) + If data.ListExists Then + If MCTOptions.Destination.IsEmptyString Then + Using f As New FeedCopyToForm(data_files, isCopy) f.ShowDialog() - If f.DialogResult = DialogResult.OK Then dest = f.Destination + If f.DialogResult = DialogResult.OK Then moveOptions = f.Result End Using Else - dest = NewDestination + moveOptions = MCTOptions End If - If Not dest.IsEmptyString Then + + With moveOptions + If Not .Destination.IsEmptyString And .ReplaceUserProfile And .ReplaceUserProfile_CreateIfNull And .ReplaceUserProfile_Profile Is Nothing Then + Dim existingPathInstances As IEnumerable(Of String) = Nothing + Dim __user As UserInfo + Dim __host As Plugin.Hosts.SettingsHost = Settings(API.PathPlugin.PluginKey).Default + Dim __userName$ = .Destination.Segments.LastOrDefault + If Settings.UsersList.Count > 0 Then _ + existingPathInstances = (From __uu As UserInfo In Settings.UsersList + Where __uu.Plugin = API.PathPlugin.PluginKey + Select __uu.Name.ToLower) + Do + __userName = InputBoxE("Enter a new username for the 'path' plugin:", MsgTitle, __userName) + If __userName.IsEmptyString Then + Return False + Else + If Not existingPathInstances.ListExists OrElse Not existingPathInstances.Contains(__userName.ToLower) Then + Exit Do + ElseIf MsgBoxE({$"The name you entered ({__userName}) already exists", MsgTitle}, vbCritical,,, {"Retry", "Cancel"}) = 1 Then + Return False + End If + End If + Loop + __user = New UserInfo(__userName, __host) With {.SpecialPath = moveOptions.Destination.CSFilePS} + __user.UpdateUserFile() + If Settings.UsersList.Count = 0 OrElse Not Settings.UsersList.Contains(__user) Then + Settings.UpdateUsersList(__user) + With Settings.Users + Dim startIndx% = .Count + .Add(API.Base.UserDataBase.GetInstance(__user)) + With .Last + If Not .FileExists Then .UpdateUserInformation() + End With + RaiseEvent UsersAdded(startIndx) + moveOptions.ReplaceUserProfile_Profile = .Last + End With + + Else + MsgBoxE({$"The user list already contains the user you want to add.{vbCr}Operation canceled.", MsgTitle}, vbCritical) + Return False + End If + End If + End With + + If Not moveOptions.Destination.IsEmptyString Then If Not isCopy Then - eFiles = files.Where(Function(ByVal fff As SFile) As Boolean - fff.Path = dest - Return fff.Exists - End Function) + Dim eFileResult As Func(Of UserMediaD, SFile) = Function(ByVal fff As UserMediaD) As SFile + Dim _fff As SFile = fff.Data.File + _fff.Path = moveOptions.DestinationTrue(fff).Path + Return _fff + End Function + eFiles = (From ef As UserMediaD In data Where eFileResult.Invoke(ef).Exists Select eFileResult.Invoke(ef)) If eFiles.ListExists Then _ renameExisting = MsgBoxE(New MMessage("The following files already exist at the destination. " & "Do you still want to move them? These files will be renamed and moved." & vbCr & - $"Destination: {dest.PathWithSeparator}{vbCr}{vbCr}" & - eFiles.ListToString(vbCr), MsgTitle, {"Move", "Cancel"}, vbExclamation)) = 0 + $"Destination: {moveOptions.Destination.PathWithSeparator}{vbCr}{vbCr}" & + eFiles.ListToString(vbCr), MsgTitle, {"Move", "Cancel"}, vbExclamation) With {.Editable = True}) = 0 End If - For Each ff In files - If Not ff.IsEmptyString Then + For Each dd In data + If Not dd.Data.File.IsEmptyString Then + ff = dd.Data.File df = ff - df.Path = dest.Path + df.Path = moveOptions.DestinationTrue(dd).Path If isCopy Then If ff.Copy(df) Then result = True Else @@ -563,7 +617,7 @@ Namespace DownloadObjects mm = Downloader.Files(indx) mm_data = mm.Data mm_data.File = df - mm = New UserMediaD(mm_data, mm.User, mm.Session, mm.Date) + mm = New UserMediaD(mm_data, If(moveOptions.ReplaceUserProfile_Profile, mm.User), mm.Session, mm.Date) Downloader.Files(indx) = mm downloaderFilesUpdated = True End If @@ -580,7 +634,7 @@ Namespace DownloadObjects sessionData.Clear() x = New XmlFile(sesFile, Protector.Modes.All, False) With {.AllowSameNames = True} x.LoadData() - If x.Count > 0 Then sessionData.ListAddList(x) + If x.Count > 0 Then sessionData.ListAddList(x, LAP.IgnoreICopier) x.Dispose() If sessionData.Count > 0 Then For Each rfile As KeyValuePair(Of SFile, SFile) In filesReplace @@ -591,9 +645,13 @@ Namespace DownloadObjects mm = sessionData(indx) mm_data = mm.Data mm_data.File = df - mm = New UserMediaD(mm_data, mm.User, mm.Session, mm.Date) + mm = New UserMediaD(mm_data, If(moveOptions.ReplaceUserProfile_Profile, mm.User), mm.Session, mm.Date) sessionData(indx) = mm sesFilesReplaced = True + If DataList.Count > 0 Then + indx = DataList.FindIndex(finder) + If indx >= 0 Then DataList(indx) = mm + End If End If Next If sesFilesReplaced Then @@ -607,11 +665,11 @@ Namespace DownloadObjects End If End If End If - If filesReplace.Count > 0 Then filesReplace.ForEach(Sub(fr) Settings.Feeds.UpdateDataByFile(fr.Key, fr.Value)) + If filesReplace.Count > 0 Then filesReplace.ForEach(Sub(fr) Settings.Feeds.UpdateDataByFile(fr.Key, fr.Value, moveOptions)) filesReplace.Clear() - RefillList() End If - If IsInternal Then MsgBoxE({$"The following files were {IIf(isCopy, "copied", "moved")} to{vbCr}{dest}{vbCr}{vbCr}{files.ListToString(vbCr)}", MsgTitle}) + If IsInternal Then MsgBoxE(New MMessage($"The following files were {IIf(isCopy, "copied", "moved")} to{vbCr}{moveOptions.Destination}{vbCr}{vbCr}{data_files.ListToString(vbCr)}", MsgTitle) With {.Editable = True}) + If Not isCopy And updateFileLocations Then RefillList() End If Else MsgBoxE({"No files selected", MsgTitle}, vbExclamation) @@ -899,7 +957,7 @@ Namespace DownloadObjects Else MsgBoxE({"No destination selected", msgTitle}, vbExclamation) End If - ElseIf mfrom.ListExists(1) Then + ElseIf mFrom.ListExists(1) Then MsgBoxE({"You must select two or more files to merge feeds", msgTitle}, vbExclamation) Else MsgBoxE({"You haven't selected any feeds", msgTitle}, vbExclamation) @@ -957,8 +1015,8 @@ Namespace DownloadObjects End Sub #End Region #Region "FeedMedia handlers" - Private Sub FeedMedia_MediaMove(ByVal Sender As FeedMedia, ByVal Destination As SFile, ByRef Result As Boolean) - Result = MoveCopyFiles(False, Nothing, Destination, Sender.File) + Private Sub FeedMedia_MediaMove(ByVal Sender As FeedMedia, ByVal MCTOptions As FeedMoveCopyTo, ByRef Result As Boolean) + Result = MoveCopyFiles(False, Nothing, MCTOptions, Sender) End Sub Private Sub FeedMedia_MediaDeleted(ByVal Sender As FeedMedia) Try diff --git a/SCrawler/Download/Feed/FeedCopyToForm.Designer.vb b/SCrawler/Download/Feed/FeedCopyToForm.Designer.vb index 786ed5e..7092c26 100644 --- a/SCrawler/Download/Feed/FeedCopyToForm.Designer.vb +++ b/SCrawler/Download/Feed/FeedCopyToForm.Designer.vb @@ -22,24 +22,45 @@ Namespace DownloadObjects Private components As System.ComponentModel.IContainer Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer + Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel Dim ActionButton1 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(FeedCopyToForm)) Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim ActionButton3 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim ActionButton4 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel Dim FRM_FILES As System.Windows.Forms.GroupBox + Dim ActionButton5 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton6 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ListColumn1 As PersonalUtilities.Forms.Controls.Base.ListColumn = New PersonalUtilities.Forms.Controls.Base.ListColumn() + Dim ListColumn2 As PersonalUtilities.Forms.Controls.Base.ListColumn = New PersonalUtilities.Forms.Controls.Base.ListColumn() + Dim ActionButton7 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton8 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ListColumn3 As PersonalUtilities.Forms.Controls.Base.ListColumn = New PersonalUtilities.Forms.Controls.Base.ListColumn() + Dim ListColumn4 As PersonalUtilities.Forms.Controls.Base.ListColumn = New PersonalUtilities.Forms.Controls.Base.ListColumn() + Dim TP_PROFILES As System.Windows.Forms.TableLayoutPanel + Dim TT_MAIN As System.Windows.Forms.ToolTip Me.CMB_DEST = New PersonalUtilities.Forms.Controls.ComboBoxExtended() Me.TXT_FILES = New System.Windows.Forms.RichTextBox() + Me.CH_VIDEO_SEP = New System.Windows.Forms.CheckBox() + Me.CMB_PROFILE = New PersonalUtilities.Forms.Controls.ComboBoxExtended() + Me.CMB_PROFILE_PATH = New PersonalUtilities.Forms.Controls.ComboBoxExtended() + Me.CH_PROFILE_REPLACE = New System.Windows.Forms.CheckBox() + Me.CH_PROFILE_CREATE = New System.Windows.Forms.CheckBox() CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() TP_MAIN = New System.Windows.Forms.TableLayoutPanel() FRM_FILES = New System.Windows.Forms.GroupBox() + TP_PROFILES = New System.Windows.Forms.TableLayoutPanel() + TT_MAIN = New System.Windows.Forms.ToolTip(Me.components) CONTAINER_MAIN.ContentPanel.SuspendLayout() CONTAINER_MAIN.SuspendLayout() - CType(Me.CMB_DEST, System.ComponentModel.ISupportInitialize).BeginInit() TP_MAIN.SuspendLayout() + CType(Me.CMB_DEST, System.ComponentModel.ISupportInitialize).BeginInit() FRM_FILES.SuspendLayout() + CType(Me.CMB_PROFILE, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.CMB_PROFILE_PATH, System.ComponentModel.ISupportInitialize).BeginInit() + TP_PROFILES.SuspendLayout() Me.SuspendLayout() ' 'CONTAINER_MAIN @@ -48,16 +69,39 @@ Namespace DownloadObjects 'CONTAINER_MAIN.ContentPanel ' CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN) - CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(534, 116) + CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(534, 266) CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill CONTAINER_MAIN.LeftToolStripPanelVisible = False CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) CONTAINER_MAIN.Name = "CONTAINER_MAIN" CONTAINER_MAIN.RightToolStripPanelVisible = False - CONTAINER_MAIN.Size = New System.Drawing.Size(534, 141) + CONTAINER_MAIN.Size = New System.Drawing.Size(534, 266) CONTAINER_MAIN.TabIndex = 0 CONTAINER_MAIN.TopToolStripPanelVisible = False ' + 'TP_MAIN + ' + TP_MAIN.ColumnCount = 1 + TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_MAIN.Controls.Add(Me.CMB_DEST, 0, 0) + TP_MAIN.Controls.Add(FRM_FILES, 0, 5) + TP_MAIN.Controls.Add(Me.CH_VIDEO_SEP, 0, 1) + TP_MAIN.Controls.Add(Me.CMB_PROFILE, 0, 3) + TP_MAIN.Controls.Add(Me.CMB_PROFILE_PATH, 0, 4) + TP_MAIN.Controls.Add(TP_PROFILES, 0, 2) + TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill + TP_MAIN.Location = New System.Drawing.Point(0, 0) + TP_MAIN.Name = "TP_MAIN" + TP_MAIN.RowCount = 6 + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_MAIN.Size = New System.Drawing.Size(534, 266) + TP_MAIN.TabIndex = 0 + ' 'CMB_DEST ' ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image) @@ -78,10 +122,13 @@ Namespace DownloadObjects Me.CMB_DEST.Buttons.Add(ActionButton2) Me.CMB_DEST.Buttons.Add(ActionButton3) Me.CMB_DEST.Buttons.Add(ActionButton4) - Me.CMB_DEST.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.Label - Me.CMB_DEST.CaptionText = "Destination:" + Me.CMB_DEST.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox + Me.CMB_DEST.CaptionText = "Destination" + Me.CMB_DEST.CaptionToolTipEnabled = True + Me.CMB_DEST.CaptionToolTipText = "If checked, the profile path will be ignored" Me.CMB_DEST.CaptionVisible = True - Me.CMB_DEST.CaptionWidth = 70.0R + Me.CMB_DEST.CaptionWidth = 90.0R + Me.CMB_DEST.ChangeControlsEnableOnCheckedChange = False Me.CMB_DEST.Dock = System.Windows.Forms.DockStyle.Fill Me.CMB_DEST.Location = New System.Drawing.Point(3, 3) Me.CMB_DEST.Name = "CMB_DEST" @@ -89,30 +136,14 @@ Namespace DownloadObjects Me.CMB_DEST.TabIndex = 0 Me.CMB_DEST.TextBoxBorderStyle = System.Windows.Forms.BorderStyle.FixedSingle ' - 'TP_MAIN - ' - TP_MAIN.ColumnCount = 1 - TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_MAIN.Controls.Add(Me.CMB_DEST, 0, 0) - TP_MAIN.Controls.Add(FRM_FILES, 0, 1) - TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill - TP_MAIN.Location = New System.Drawing.Point(0, 0) - TP_MAIN.Name = "TP_MAIN" - TP_MAIN.RowCount = 2 - TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) - TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) - TP_MAIN.Size = New System.Drawing.Size(534, 116) - TP_MAIN.TabIndex = 0 - ' 'FRM_FILES ' FRM_FILES.Controls.Add(Me.TXT_FILES) FRM_FILES.Dock = System.Windows.Forms.DockStyle.Fill - FRM_FILES.Location = New System.Drawing.Point(3, 31) + FRM_FILES.Location = New System.Drawing.Point(3, 137) FRM_FILES.Name = "FRM_FILES" - FRM_FILES.Size = New System.Drawing.Size(528, 82) - FRM_FILES.TabIndex = 1 + FRM_FILES.Size = New System.Drawing.Size(528, 126) + FRM_FILES.TabIndex = 5 FRM_FILES.TabStop = False FRM_FILES.Text = "Files:" ' @@ -122,32 +153,160 @@ Namespace DownloadObjects Me.TXT_FILES.Location = New System.Drawing.Point(3, 16) Me.TXT_FILES.Name = "TXT_FILES" Me.TXT_FILES.ReadOnly = True - Me.TXT_FILES.Size = New System.Drawing.Size(522, 63) + Me.TXT_FILES.Size = New System.Drawing.Size(522, 107) Me.TXT_FILES.TabIndex = 0 Me.TXT_FILES.Text = "" ' + 'CH_VIDEO_SEP + ' + Me.CH_VIDEO_SEP.AutoSize = True + Me.CH_VIDEO_SEP.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_VIDEO_SEP.Location = New System.Drawing.Point(3, 31) + Me.CH_VIDEO_SEP.Name = "CH_VIDEO_SEP" + Me.CH_VIDEO_SEP.Size = New System.Drawing.Size(528, 19) + Me.CH_VIDEO_SEP.TabIndex = 1 + Me.CH_VIDEO_SEP.Text = "Place videos in a separate video folder" + Me.CH_VIDEO_SEP.UseVisualStyleBackColor = True + ' + 'CMB_PROFILE + ' + ActionButton5.BackgroundImage = CType(resources.GetObject("ActionButton5.BackgroundImage"), System.Drawing.Image) + ActionButton5.Enabled = False + ActionButton5.Name = "Clear" + ActionButton5.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + ActionButton6.BackgroundImage = CType(resources.GetObject("ActionButton6.BackgroundImage"), System.Drawing.Image) + ActionButton6.Enabled = False + ActionButton6.Name = "ArrowDown" + ActionButton6.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.ArrowDown + Me.CMB_PROFILE.Buttons.Add(ActionButton5) + Me.CMB_PROFILE.Buttons.Add(ActionButton6) + Me.CMB_PROFILE.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.RadioButton + Me.CMB_PROFILE.CaptionPadding = New System.Windows.Forms.Padding(0, 0, 1, 0) + Me.CMB_PROFILE.CaptionText = "Profile" + Me.CMB_PROFILE.CaptionVisible = True + ListColumn1.DisplayMember = True + ListColumn1.Name = "COL_NAME" + ListColumn1.Text = "Name" + ListColumn1.Width = -1 + ListColumn2.Name = "COL_VALUE" + ListColumn2.Text = "Value" + ListColumn2.ValueMember = True + ListColumn2.Visible = False + Me.CMB_PROFILE.Columns.Add(ListColumn1) + Me.CMB_PROFILE.Columns.Add(ListColumn2) + Me.CMB_PROFILE.Dock = System.Windows.Forms.DockStyle.Fill + Me.CMB_PROFILE.Location = New System.Drawing.Point(3, 81) + Me.CMB_PROFILE.Name = "CMB_PROFILE" + Me.CMB_PROFILE.Size = New System.Drawing.Size(528, 22) + Me.CMB_PROFILE.TabIndex = 3 + Me.CMB_PROFILE.TextBoxBorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + ' + 'CMB_PROFILE_PATH + ' + ActionButton7.BackgroundImage = CType(resources.GetObject("ActionButton7.BackgroundImage"), System.Drawing.Image) + ActionButton7.Enabled = False + ActionButton7.Name = "Clear" + ActionButton7.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + ActionButton8.BackgroundImage = CType(resources.GetObject("ActionButton8.BackgroundImage"), System.Drawing.Image) + ActionButton8.Enabled = False + ActionButton8.Name = "ArrowDown" + ActionButton8.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.ArrowDown + Me.CMB_PROFILE_PATH.Buttons.Add(ActionButton7) + Me.CMB_PROFILE_PATH.Buttons.Add(ActionButton8) + Me.CMB_PROFILE_PATH.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.RadioButton + Me.CMB_PROFILE_PATH.CaptionPadding = New System.Windows.Forms.Padding(0, 0, 1, 0) + Me.CMB_PROFILE_PATH.CaptionText = "Profile (path)" + Me.CMB_PROFILE_PATH.CaptionVisible = True + ListColumn3.DisplayMember = True + ListColumn3.Name = "COL_NAME" + ListColumn3.Text = "Name" + ListColumn3.Width = -1 + ListColumn4.Name = "COL_VALUE" + ListColumn4.Text = "Value" + ListColumn4.ValueMember = True + ListColumn4.Visible = False + Me.CMB_PROFILE_PATH.Columns.Add(ListColumn3) + Me.CMB_PROFILE_PATH.Columns.Add(ListColumn4) + Me.CMB_PROFILE_PATH.Dock = System.Windows.Forms.DockStyle.Fill + Me.CMB_PROFILE_PATH.Location = New System.Drawing.Point(3, 109) + Me.CMB_PROFILE_PATH.Name = "CMB_PROFILE_PATH" + Me.CMB_PROFILE_PATH.Size = New System.Drawing.Size(528, 22) + Me.CMB_PROFILE_PATH.TabIndex = 4 + Me.CMB_PROFILE_PATH.TextBoxBorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + ' + 'TP_PROFILES + ' + TP_PROFILES.ColumnCount = 2 + TP_PROFILES.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + TP_PROFILES.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + TP_PROFILES.Controls.Add(Me.CH_PROFILE_REPLACE, 0, 0) + TP_PROFILES.Controls.Add(Me.CH_PROFILE_CREATE, 1, 0) + TP_PROFILES.Dock = System.Windows.Forms.DockStyle.Fill + TP_PROFILES.Location = New System.Drawing.Point(0, 53) + TP_PROFILES.Margin = New System.Windows.Forms.Padding(0) + TP_PROFILES.Name = "TP_PROFILES" + TP_PROFILES.RowCount = 1 + TP_PROFILES.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_PROFILES.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_PROFILES.Size = New System.Drawing.Size(534, 25) + TP_PROFILES.TabIndex = 2 + ' + 'CH_PROFILE_REPLACE + ' + Me.CH_PROFILE_REPLACE.AutoSize = True + Me.CH_PROFILE_REPLACE.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_PROFILE_REPLACE.Location = New System.Drawing.Point(3, 3) + Me.CH_PROFILE_REPLACE.Name = "CH_PROFILE_REPLACE" + Me.CH_PROFILE_REPLACE.Size = New System.Drawing.Size(261, 19) + Me.CH_PROFILE_REPLACE.TabIndex = 0 + Me.CH_PROFILE_REPLACE.Text = "Replace user profile" + TT_MAIN.SetToolTip(Me.CH_PROFILE_REPLACE, "The user profile will be replaced with the selected one") + Me.CH_PROFILE_REPLACE.UseVisualStyleBackColor = True + ' + 'CH_PROFILE_CREATE + ' + Me.CH_PROFILE_CREATE.AutoSize = True + Me.CH_PROFILE_CREATE.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_PROFILE_CREATE.Location = New System.Drawing.Point(270, 3) + Me.CH_PROFILE_CREATE.Name = "CH_PROFILE_CREATE" + Me.CH_PROFILE_CREATE.Size = New System.Drawing.Size(261, 19) + Me.CH_PROFILE_CREATE.TabIndex = 1 + Me.CH_PROFILE_CREATE.Text = "Create path profile" + TT_MAIN.SetToolTip(Me.CH_PROFILE_CREATE, "Create a path profile if it doesn't exist") + Me.CH_PROFILE_CREATE.UseVisualStyleBackColor = True + ' 'FeedCopyToForm ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(534, 141) + Me.ClientSize = New System.Drawing.Size(534, 266) Me.Controls.Add(CONTAINER_MAIN) Me.KeyPreview = True Me.MinimizeBox = False - Me.MinimumSize = New System.Drawing.Size(550, 150) + Me.MinimumSize = New System.Drawing.Size(550, 305) Me.Name = "FeedCopyToForm" Me.ShowInTaskbar = False Me.Text = "Copy to..." CONTAINER_MAIN.ContentPanel.ResumeLayout(False) CONTAINER_MAIN.ResumeLayout(False) CONTAINER_MAIN.PerformLayout() - CType(Me.CMB_DEST, System.ComponentModel.ISupportInitialize).EndInit() TP_MAIN.ResumeLayout(False) + TP_MAIN.PerformLayout() + CType(Me.CMB_DEST, System.ComponentModel.ISupportInitialize).EndInit() FRM_FILES.ResumeLayout(False) + CType(Me.CMB_PROFILE, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.CMB_PROFILE_PATH, System.ComponentModel.ISupportInitialize).EndInit() + TP_PROFILES.ResumeLayout(False) + TP_PROFILES.PerformLayout() Me.ResumeLayout(False) End Sub Private WithEvents CMB_DEST As PersonalUtilities.Forms.Controls.ComboBoxExtended Private WithEvents TXT_FILES As RichTextBox + Private WithEvents CH_VIDEO_SEP As CheckBox + Private WithEvents CMB_PROFILE As PersonalUtilities.Forms.Controls.ComboBoxExtended + Private WithEvents CMB_PROFILE_PATH As PersonalUtilities.Forms.Controls.ComboBoxExtended + Private WithEvents CH_PROFILE_REPLACE As CheckBox + Private WithEvents CH_PROFILE_CREATE As CheckBox End Class End Namespace \ No newline at end of file diff --git a/SCrawler/Download/Feed/FeedCopyToForm.resx b/SCrawler/Download/Feed/FeedCopyToForm.resx index 0266693..6d50970 100644 --- a/SCrawler/Download/Feed/FeedCopyToForm.resx +++ b/SCrawler/Download/Feed/FeedCopyToForm.resx @@ -258,4 +258,209 @@ False + + + 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 + AAAASUVORK5CYII= + + + + + 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 + AAAASUVORK5CYII= + + + + False + + + False + + + 17, 17 + \ No newline at end of file diff --git a/SCrawler/Download/Feed/FeedCopyToForm.vb b/SCrawler/Download/Feed/FeedCopyToForm.vb index 2d14f43..b5807db 100644 --- a/SCrawler/Download/Feed/FeedCopyToForm.vb +++ b/SCrawler/Download/Feed/FeedCopyToForm.vb @@ -6,23 +6,31 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY +Imports SCrawler.API +Imports SCrawler.API.Base Imports PersonalUtilities.Tools Imports PersonalUtilities.Forms +Imports PersonalUtilities.Forms.Controls Imports PersonalUtilities.Forms.Controls.Base Imports ADB = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons Namespace DownloadObjects Friend Class FeedCopyToForm +#Region "Declarations" Private WithEvents MyDefs As DefaultFormOptions - Private _Destination As SFile = Nothing - Friend ReadOnly Property Destination As SFile + Private _Result As FeedMoveCopyTo + Friend ReadOnly Property Result As FeedMoveCopyTo Get - Return _Destination + Return _Result End Get End Property + Private ReadOnly Profiles As List(Of IUserData) +#End Region +#Region "Initializer" Friend Sub New(ByVal Files As IEnumerable(Of SFile), ByVal IsCopy As Boolean) InitializeComponent() MyDefs = New DefaultFormOptions(Me, Settings.Design) If Files.ListExists Then TXT_FILES.Text = Files.ListToString(vbNewLine) + Profiles = New List(Of IUserData) Text = $"{IIf(IsCopy, "Copy", "Move")} files to..." Try If IsCopy Then @@ -34,10 +42,12 @@ Namespace DownloadObjects ShowIcon = False End Try End Sub +#End Region +#Region "Form handlers" Private Sub FeedCopyToForm_Load(sender As Object, e As EventArgs) Handles Me.Load Try With MyDefs - .MyViewInitialize(True) + .MyViewInitialize() .AddOkCancelToolbar() .MyFieldsCheckerE = New FieldsChecker With .MyFieldsCheckerE @@ -45,7 +55,43 @@ Namespace DownloadObjects .EndLoaderOperations() End With Settings.DownloadLocations.PopulateComboBox(CMB_DEST) - CMB_DEST.Text = Settings.FeedLastCopyMoveLocation.Value + With Settings + CMB_DEST.Text = .FeedMoveCopyLastLocation.Value + CH_VIDEO_SEP.Checked = .FeedMoveCopySeparateVideo + CH_PROFILE_REPLACE.Checked = .FeedMoveCopyReplaceUserProfile + CH_PROFILE_CREATE.Checked = .FeedMoveCopyCreatePathProfile + End With + If Settings.Users.Count > 0 Then _ + Profiles.AddRange(Settings.Users.SelectMany(Of IUserData)(Function(ByVal p As IUserData) As IEnumerable(Of IUserData) + If p.IsCollection Then + Return DirectCast(p, UserDataBind).Collections + Else + Return {p} + End If + End Function)) + If Profiles.Count > 0 Then + CMB_PROFILE.BeginUpdate() + CMB_PROFILE_PATH.BeginUpdate() + For i% = 0 To Profiles.Count - 1 + With DirectCast(Profiles(i), UserDataBase) + If If(.HOST?.Key, String.Empty) = PathPlugin.PluginKey Then + CMB_PROFILE_PATH.Items.Add(New ListItem({ .Self.ToStringForLog, i})) + Else + CMB_PROFILE.Items.Add(New ListItem({ .Self.ToStringForLog, i})) + End If + End With + Next + CMB_PROFILE.EndUpdate() + CMB_PROFILE_PATH.EndUpdate() + End If + UpdateCombo() + If Not CMB_DEST.Text.IsEmptyString Then + _ComboChangingByDest = True + UpdateComboIndex(CMB_PROFILE) + UpdateComboIndex(CMB_PROFILE_PATH) + _ComboChangingByDest = False + End If + UpdateComboCheck() .EndLoaderOperations() .MyOkCancel.EnableOK = True End With @@ -64,16 +110,169 @@ Namespace DownloadObjects End If If b Then e.Handled = True End Sub - Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick - If MyDefs.MyFieldsChecker.AllParamsOK Then - _Destination = CMB_DEST.Text - Settings.FeedLastCopyMoveLocation.Value = _Destination - MyDefs.CloseForm() - End If + Private Sub FeedCopyToForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed + Profiles.Clear() End Sub +#End Region +#Region "Ok, Cancel" + Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick + Try + If MyDefs.MyFieldsChecker.AllParamsOK Then + _Result = New FeedMoveCopyTo With { + .Destination = CMB_DEST.Text, + .SeparateVideoFolder = CH_VIDEO_SEP.Checked, + .ReplaceUserProfile = CH_PROFILE_REPLACE.Checked, + .ReplaceUserProfile_CreateIfNull = CH_PROFILE_CREATE.Checked + } + If CH_PROFILE_REPLACE.Checked Then + If CMB_PROFILE.Enabled And CMB_PROFILE.Checked Then + With CMB_PROFILE + If .SelectedIndex >= 0 Then _ + _Result.ReplaceUserProfile_Profile = Settings.GetUser(GetComboProfile(.Self), False) + End With + ElseIf CMB_PROFILE_PATH.Enabled And CMB_PROFILE_PATH.Checked Then + With CMB_PROFILE_PATH + If .SelectedIndex >= 0 Then _ + _Result.ReplaceUserProfile_Profile = Settings.GetUser(GetComboProfile(.Self), False) + End With + End If + End If + With Settings + .BeginUpdate() + .FeedMoveCopyLastLocation.Value = CMB_DEST.Text + .FeedMoveCopyIsProfileChecked.Value = CMB_PROFILE.Checked + .FeedMoveCopySeparateVideo.Value = CH_VIDEO_SEP.Checked + .FeedMoveCopyReplaceUserProfile.Value = CH_PROFILE_REPLACE.Checked + .FeedMoveCopyCreatePathProfile.Value = CH_PROFILE_CREATE.Checked + .EndUpdate() + End With + MyDefs.CloseForm() + End If + Catch ex As Exception + ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "[FeedCopyToForm.OK]") + End Try + End Sub +#End Region +#Region "Controls" + Private _TextChangingByCombo As Boolean = False + Private _ComboChangingByDest As Boolean = False Private Sub CMB_DEST_ActionOnButtonClick(ByVal Sender As Object, ByVal e As ActionButtonEventArgs) Handles CMB_DEST.ActionOnButtonClick If Sender.DefaultButton = ADB.Open Or Sender.DefaultButton = ADB.Add Then _ Settings.DownloadLocations.ChooseNewLocation(CMB_DEST, Sender.DefaultButton = ADB.Add, Sender.DefaultButton = ADB.Add) End Sub + Private Sub CMB_DEST_ActionOnTextChanged(ByVal Sender As Object, ByVal e As EventArgs) Handles CMB_DEST.ActionOnTextChanged + If Not _TextChangingByCombo And Not CMB_DEST.Checked And Not CMB_DEST.Text.IsEmptyString Then + _ComboChangingByDest = True + UpdateComboIndex(CMB_PROFILE) + UpdateComboIndex(CMB_PROFILE_PATH) + UpdateComboCheck() + _ComboChangingByDest = False + End If + End Sub + Private Sub UpdateComboIndex(ByVal CMB As ComboBoxExtended) + Try + With CMB + If .Count > 0 Then + Dim t$ = CMB_DEST.Text.CSFilePSN.StringToLower + Dim lvi_check As Func(Of ListItem, Boolean, Boolean) = + Function(ByVal lvi As ListItem, ByVal exact As Boolean) As Boolean + Dim ii% = lvi.Value(1) + If ii.ValueBetween(0, Profiles.Count - 1) Then + With DirectCast(Profiles(ii), UserDataBase) + If exact Then + Return t = .MyFile.CutPath.PathNoSeparator.StringToLower + Else + Return t.StartsWith(.MyFile.CutPath.PathNoSeparator.StringToLower) + End If + End With + End If + Return False + End Function + Dim i% = CMB.Items.ListIndexOf(Function(lvi) lvi_check.Invoke(lvi, True)) + If i = -1 Then i = CMB.Items.ListIndexOf(Function(lvi) lvi_check.Invoke(lvi, False)) + CMB.SelectedIndex = i + End If + End With + Catch ex As Exception + CMB.SelectedIndex = -1 + End Try + End Sub + Private Sub UpdateComboCheck() + Try + Dim isProfile As Boolean + If CMB_PROFILE.SelectedIndex >= 0 And CMB_PROFILE_PATH.SelectedIndex >= 0 Then + isProfile = Settings.FeedMoveCopyIsProfileChecked + ElseIf CMB_PROFILE.SelectedIndex >= 0 Then + isProfile = True + ElseIf CMB_PROFILE_PATH.SelectedIndex >= 0 Then + isProfile = False + Else + isProfile = Settings.FeedMoveCopyIsProfileChecked + End If + If isProfile Then + CMB_PROFILE.Checked = True + Else + CMB_PROFILE_PATH.Checked = True + End If + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendToLog, ex, "[FeedCopyToForm.UpdateComboCheck]") + End Try + End Sub + Private Sub CH_PROFILE_REPLACE_CheckedChanged(sender As Object, e As EventArgs) Handles CH_PROFILE_REPLACE.CheckedChanged + UpdateCombo() + End Sub + Private Sub UpdateCombo() + Dim e As Boolean = CH_PROFILE_REPLACE.Checked + CH_PROFILE_CREATE.Enabled = e + CMB_PROFILE.Enabled(True) = e And CMB_PROFILE.Count > 0 + CMB_PROFILE_PATH.Enabled(True) = e And CMB_PROFILE_PATH.Count > 0 + End Sub +#Region "Comboboxes" + Private Sub CMB_PROFILE_ActionSelectedItemChanged(ByVal Sender As Object, ByVal e As EventArgs, ByVal Item As ListViewItem) Handles CMB_PROFILE.ActionSelectedItemChanged + If Not MyDefs.Initializing Then SetDestinationByCombo(CMB_PROFILE) + End Sub + Private Sub CMB_PROFILE_ActionOnCheckedChange(ByVal Sender As Object, ByVal e As EventArgs, ByVal Checked As Boolean) Handles CMB_PROFILE.ActionOnCheckedChange + If Checked And Not MyDefs.Initializing And Not _ComboChangingByDest Then SetDestinationByCombo(CMB_PROFILE) + End Sub + Private Sub CMB_PROFILE_ActionOnButtonClick(ByVal Sender As Object, ByVal e As ActionButtonEventArgs) Handles CMB_PROFILE.ActionOnButtonClick + If e.DefaultButton = ADB.Clear Then CMB_PROFILE.SelectedIndex = -1 + End Sub + Private Sub CMB_PROFILE_PATH_ActionSelectedItemChanged(ByVal Sender As Object, ByVal e As EventArgs, ByVal Item As ListViewItem) Handles CMB_PROFILE_PATH.ActionSelectedItemChanged + If Not MyDefs.Initializing Then SetDestinationByCombo(CMB_PROFILE_PATH) + End Sub + Private Sub CMB_PROFILE_PATH_ActionOnButtonClick(ByVal Sender As Object, ByVal e As ActionButtonEventArgs) Handles CMB_PROFILE_PATH.ActionOnButtonClick + If e.DefaultButton = ADB.Clear Then CMB_PROFILE_PATH.SelectedIndex = -1 + End Sub + Private Sub CMB_PROFILE_PATH_ActionOnCheckedChange(ByVal Sender As Object, ByVal e As EventArgs, ByVal Checked As Boolean) Handles CMB_PROFILE_PATH.ActionOnCheckedChange + If Checked And Not MyDefs.Initializing And Not _ComboChangingByDest Then SetDestinationByCombo(CMB_PROFILE_PATH) + End Sub + Private Sub SetDestinationByCombo(ByVal CMB As ComboBoxExtended) + Try + With CMB + If .Checked And .Enabled And Not CMB_DEST.Checked And Not _ComboChangingByDest And .SelectedIndex >= 0 Then + _TextChangingByCombo = True + CMB_DEST.Text = GetComboProfile(.Self).MyFile.CutPath.PathWithSeparator + _TextChangingByCombo = False + End If + End With + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendToLog, ex, "[FeedCopyToForm.SetDestinationByCombo]") + End Try + End Sub + Private Function GetComboProfile(ByVal CMB As ComboBoxExtended) As UserDataBase + Try + With CMB + If .SelectedIndex >= 0 Then + Dim i% = .Items(.SelectedIndex).Value(1) + If i.ValueBetween(0, Profiles.Count - 1) Then Return Profiles(i) + End If + End With + Return Nothing + Catch ex As Exception + Return ErrorsDescriber.Execute(EDP.SendToLog + EDP.ReturnValue, ex, "[FeedCopyToForm.GetComboProfile]") + End Try + End Function +#End Region +#End Region End Class End Namespace \ No newline at end of file diff --git a/SCrawler/Download/Feed/FeedMedia.vb b/SCrawler/Download/Feed/FeedMedia.vb index 3f834b8..83d0db6 100644 --- a/SCrawler/Download/Feed/FeedMedia.vb +++ b/SCrawler/Download/Feed/FeedMedia.vb @@ -18,7 +18,7 @@ Namespace DownloadObjects Friend Event MediaDeleted(ByVal Sender As Object) Friend Event MediaDownload As EventHandler Friend Event FeedAddWithRemove(ByVal Sender As FeedMedia, ByVal Feeds As IEnumerable(Of String), ByVal Media As UserMediaD, ByVal RemoveOperation As Boolean) - Friend Event MediaMove(ByVal Sender As FeedMedia, ByVal Destination As SFile, ByRef Result As Boolean) + Friend Event MediaMove(ByVal Sender As FeedMedia, ByVal MCTOptions As FeedMoveCopyTo, ByRef Result As Boolean) #End Region #Region "Declarations" Private Const VideoHeight As Integer = 450 @@ -489,20 +489,20 @@ Namespace DownloadObjects Try If Not File.IsEmptyString Then Dim isCopy As Boolean = sender Is BTT_COPY_TO - Dim dest As SFile = Nothing + Dim moveOptions As FeedMoveCopyTo = Nothing Dim ff As SFile = File Dim result As Boolean = False Using f As New FeedCopyToForm({File}, isCopy) f.ShowDialog() - If f.DialogResult = DialogResult.OK Then dest = f.Destination + If f.DialogResult = DialogResult.OK Then moveOptions = f.Result End Using - If Not dest.IsEmptyString Then - ff.Path = dest + If Not moveOptions.Destination.IsEmptyString Then + ff.Path = moveOptions.Destination.Path If isCopy Then result = File.Copy(ff) Else - RaiseEvent MediaMove(Me, dest, result) + RaiseEvent MediaMove(Me, moveOptions, result) End If If result Then MsgBoxE({$"File {IIf(isCopy, "copied", "moved")}{vbCr}Source: '{File}'{vbCr}Destination: '{ff}'", MsgTitle}) End If diff --git a/SCrawler/Download/Feed/FeedMoveCopyTo.vb b/SCrawler/Download/Feed/FeedMoveCopyTo.vb new file mode 100644 index 0000000..90da6dc --- /dev/null +++ b/SCrawler/Download/Feed/FeedMoveCopyTo.vb @@ -0,0 +1,31 @@ +' Copyright (C) Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports UTypes = SCrawler.API.Base.UserMedia.Types +Namespace DownloadObjects + Friend Structure FeedMoveCopyTo + Friend Destination As SFile + Friend SeparateVideoFolder As Boolean + Friend ReplaceUserProfile As Boolean + Friend ReplaceUserProfile_CreateIfNull As Boolean + Friend ReplaceUserProfile_Profile As API.Base.IUserData + Friend ReadOnly Property DestinationTrue(ByVal Media As TDownloader.UserMediaD) As SFile + Get + If SeparateVideoFolder Then + Dim f$ = Destination.PathWithSeparator + With Media.Data + If Not (.Type = UTypes.Picture Or .Type = UTypes.GIF) Then f &= "Video\" + End With + Return f + Else + Return Destination + End If + End Get + End Property + End Structure +End Namespace \ No newline at end of file diff --git a/SCrawler/Download/Feed/FeedSpecial.vb b/SCrawler/Download/Feed/FeedSpecial.vb index 1105c75..3bf57ec 100644 --- a/SCrawler/Download/Feed/FeedSpecial.vb +++ b/SCrawler/Download/Feed/FeedSpecial.vb @@ -169,14 +169,14 @@ Namespace DownloadObjects End Function #End Region #Region "UpdateDataByFile" - Friend Sub UpdateDataByFile(ByVal InitialFile As SFile, ByVal NewFile As SFile) + Friend Sub UpdateDataByFile(ByVal InitialFile As SFile, ByVal NewFile As SFile, ByVal MCTOptions As FeedMoveCopyTo) Try Dim indx% = Items.FindIndex(Function(ii) ii.Data.File = InitialFile) If indx >= 0 Then Dim m As UserMediaD = Items(indx) Dim mm As UserMedia = m.Data mm.File = NewFile - m = New UserMediaD(mm, m.User, m.Session, m.Date) + m = New UserMediaD(mm, If(MCTOptions.ReplaceUserProfile_Profile, m.User), m.Session, m.Date) Items(indx) = m _FilesUpdated = True End If diff --git a/SCrawler/Download/Feed/FeedSpecialCollection.vb b/SCrawler/Download/Feed/FeedSpecialCollection.vb index c3c146f..71e1d6e 100644 --- a/SCrawler/Download/Feed/FeedSpecialCollection.vb +++ b/SCrawler/Download/Feed/FeedSpecialCollection.vb @@ -219,8 +219,8 @@ Namespace DownloadObjects End If Return result End Function - Friend Sub UpdateDataByFile(ByVal InitialFile As SFile, ByVal NewFile As SFile) - If Count > 0 Then Feeds.ForEach(Sub(f) f.UpdateDataByFile(InitialFile, NewFile)) + Friend Sub UpdateDataByFile(ByVal InitialFile As SFile, ByVal NewFile As SFile, ByVal MCTOptions As FeedMoveCopyTo) + If Count > 0 Then Feeds.ForEach(Sub(f) f.UpdateDataByFile(InitialFile, NewFile, MCTOptions)) End Sub Friend Sub UpdateWhereDataReplaced() If Count > 0 Then Feeds.ForEach(Sub(f) f.UpdateIfRequired()) diff --git a/SCrawler/Editors/GlobalSettingsForm.vb b/SCrawler/Editors/GlobalSettingsForm.vb index a973f74..dc48fea 100644 --- a/SCrawler/Editors/GlobalSettingsForm.vb +++ b/SCrawler/Editors/GlobalSettingsForm.vb @@ -143,7 +143,7 @@ Namespace Editors CH_FEED_OPEN_LAST_MODE.Checked = .FeedOpenLastMode CH_FEED_SHOW_FRIENDLY.Checked = .FeedShowFriendlyNames CH_FEED_SHOW_SPEC_MEDIAITEM.Checked = .FeedShowSpecialFeedsMediaItem - CH_FEED_UP_FILE_LOC_MOVE.Checked = .FeedUpdateFileLocationOnMove + CH_FEED_UP_FILE_LOC_MOVE.Checked = .FeedMoveCopyUpdateFileLocationOnMove End With .MyFieldsChecker = New FieldsChecker With .MyFieldsCheckerE @@ -317,7 +317,7 @@ Namespace Editors .FeedOpenLastMode.Value = CH_FEED_OPEN_LAST_MODE.Checked .FeedShowFriendlyNames.Value = CH_FEED_SHOW_FRIENDLY.Checked .FeedShowSpecialFeedsMediaItem.Value = CH_FEED_SHOW_SPEC_MEDIAITEM.Checked - .FeedUpdateFileLocationOnMove.Value = CH_FEED_UP_FILE_LOC_MOVE.Checked + .FeedMoveCopyUpdateFileLocationOnMove.Value = CH_FEED_UP_FILE_LOC_MOVE.Checked FeedParametersChanged = .FeedDataRows.ChangesDetected Or .FeedDataColumns.ChangesDetected Or .FeedEndless.ChangesDetected Or .FeedBackColor.ChangesDetected Or .FeedForeColor.ChangesDetected Or .FeedCenterImage.ChangesDetected diff --git a/SCrawler/MainFrame.vb b/SCrawler/MainFrame.vb index e80fc41..46a2b8d 100644 --- a/SCrawler/MainFrame.vb +++ b/SCrawler/MainFrame.vb @@ -488,6 +488,7 @@ CloseResume: If MyFeed Is Nothing Then MyFeed = New DownloadFeedForm AddHandler Downloader.FeedFilesChanged, AddressOf MyFeed.Downloader_FilesChanged + AddHandler MyFeed.UsersAdded, AddressOf OnUsersAddedHandler If Not MySavedPosts Is Nothing Then AddHandler MySavedPosts.FeedFilesChanged, AddressOf MyFeed.Downloader_FilesChanged End If If MyFeed.Visible Then MyFeed.BringToFront() Else MyFeed.Show() diff --git a/SCrawler/MainMod.vb b/SCrawler/MainMod.vb index 101c9ef..60ebfb3 100644 --- a/SCrawler/MainMod.vb +++ b/SCrawler/MainMod.vb @@ -21,6 +21,7 @@ Friend Module MainMod Friend ReadOnly FilesPattern As RParams = RParams.DM("[^\./]+?\.\w+", 1, EDP.ReturnValue) Friend Delegate Sub NotificationEventHandler(ByVal Sender As SettingsCLS.NotificationObjects, ByVal Message As String) Friend Delegate Sub UserDownloadStateChangedEventHandler(ByVal User As IUserData, ByVal IsDownloading As Boolean) + Friend Delegate Sub UsersAddedEventHandler(ByVal StartIndex As Integer) Friend Delegate Function PathMoverHandler(ByVal User As UserInfo, ByVal DestinationPattern As SFile) As SFile Friend Const LVI_TempOption As String = "Temp" Friend Const LVI_FavOption As String = "Favorite" diff --git a/SCrawler/SCrawler.vbproj b/SCrawler/SCrawler.vbproj index 237c423..a069b0f 100644 --- a/SCrawler/SCrawler.vbproj +++ b/SCrawler/SCrawler.vbproj @@ -279,6 +279,7 @@ UserControl + diff --git a/SCrawler/SettingsCLS.vb b/SCrawler/SettingsCLS.vb index beccdab..4c63e04 100644 --- a/SCrawler/SettingsCLS.vb +++ b/SCrawler/SettingsCLS.vb @@ -320,8 +320,13 @@ Friend Class SettingsCLS : Implements IDownloaderSettings, IDisposable FeedLastModeSubscriptions = New XMLValue(Of Boolean)("LastModeSubscriptions", False, MyXML, n) FeedShowFriendlyNames = New XMLValue(Of Boolean)("ShowFriendlyNames", True, MyXML, n) FeedShowSpecialFeedsMediaItem = New XMLValue(Of Boolean)("ShowSpecialFeedsMediaItem", False, MyXML, n) - FeedLastCopyMoveLocation = New XMLValue(Of SFile)("LastCopyMoveLocation",, MyXML, n) - FeedUpdateFileLocationOnMove = New XMLValue(Of Boolean)("UpdateFileLocationOnMove", True, MyXML, n) + n = {"Feed", "MoveCopy"} + FeedMoveCopyLastLocation = New XMLValue(Of SFile)("LastLocation",, MyXML, n) + FeedMoveCopyUpdateFileLocationOnMove = New XMLValue(Of Boolean)("UpdateFileLocationOnMove", True, MyXML, n) + FeedMoveCopyIsProfileChecked = New XMLValue(Of Boolean)("IsProfileChecked", True, MyXML, n) + FeedMoveCopySeparateVideo = New XMLValue(Of Boolean)("SeparateVideo",, MyXML, n) + FeedMoveCopyReplaceUserProfile = New XMLValue(Of Boolean)("ReplaceUserProfile",, MyXML, n) + FeedMoveCopyCreatePathProfile = New XMLValue(Of Boolean)("CreatePathProfile",, MyXML, n) n = {"Users"} FromChannelDownloadTop = New XMLValue(Of Integer)("FromChannelDownloadTop", 10, MyXML, n) @@ -956,8 +961,14 @@ Friend Class SettingsCLS : Implements IDownloaderSettings, IDisposable Friend ReadOnly Property FeedLastModeSubscriptions As XMLValue(Of Boolean) Friend ReadOnly Property FeedShowFriendlyNames As XMLValue(Of Boolean) Friend ReadOnly Property FeedShowSpecialFeedsMediaItem As XMLValue(Of Boolean) - Friend ReadOnly Property FeedLastCopyMoveLocation As XMLValue(Of SFile) - Friend ReadOnly Property FeedUpdateFileLocationOnMove As XMLValue(Of Boolean) +#Region "MoveCopy" + Friend ReadOnly Property FeedMoveCopyLastLocation As XMLValue(Of SFile) + Friend ReadOnly Property FeedMoveCopyUpdateFileLocationOnMove As XMLValue(Of Boolean) + Friend ReadOnly Property FeedMoveCopyIsProfileChecked As XMLValue(Of Boolean) + Friend ReadOnly Property FeedMoveCopySeparateVideo As XMLValue(Of Boolean) + Friend ReadOnly Property FeedMoveCopyReplaceUserProfile As XMLValue(Of Boolean) + Friend ReadOnly Property FeedMoveCopyCreatePathProfile As XMLValue(Of Boolean) +#End Region #End Region #Region "New version properties" Friend ReadOnly Property CheckUpdatesAtStart As XMLValue(Of Boolean)