Added Tool tips on the Main Form controls and auto complete on the Listing and Timeframe controls.
This commit is contained in:
Richard Mwewa
2023-08-09 04:14:00 +02:00
committed by GitHub
parent d266301917
commit 3576bcbf45
28 changed files with 6087 additions and 0 deletions

25
RPST GUI/RPST.sln Normal file
View File

@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.4.33213.308
MinimumVisualStudioVersion = 10.0.40219.1
Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "RPST", "RPST\RPST.vbproj", "{46C2541E-6F65-461A-A479-F65D445C36EA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{46C2541E-6F65-461A-A479-F65D445C36EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{46C2541E-6F65-461A-A479-F65D445C36EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{46C2541E-6F65-461A-A479-F65D445C36EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{46C2541E-6F65-461A-A479-F65D445C36EA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {11BEF8E8-2590-4D78-9D49-C518F26F3D47}
EndGlobalSection
EndGlobal

144
RPST GUI/RPST/AboutBox.Designer.vb generated Normal file
View File

@@ -0,0 +1,144 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class AboutBox
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As ComponentModel.ComponentResourceManager = New ComponentModel.ComponentResourceManager(GetType(AboutBox))
PictureBoxLogo = New PictureBox()
LabelProgramName = New Label()
LabelProgramDescription = New Label()
LabelVersion = New Label()
LinkLabelReadtheWiki = New LinkLabel()
Panel1 = New Panel()
LicenseRichTextBox = New RichTextBox()
CType(PictureBoxLogo, ComponentModel.ISupportInitialize).BeginInit()
Panel1.SuspendLayout()
SuspendLayout()
'
' PictureBoxLogo
'
PictureBoxLogo.BackColor = Color.Transparent
PictureBoxLogo.Image = CType(resources.GetObject("PictureBoxLogo.Image"), Image)
PictureBoxLogo.Location = New Point(12, 12)
PictureBoxLogo.Name = "PictureBoxLogo"
PictureBoxLogo.Size = New Size(88, 93)
PictureBoxLogo.SizeMode = PictureBoxSizeMode.StretchImage
PictureBoxLogo.TabIndex = 0
PictureBoxLogo.TabStop = False
'
' LabelProgramName
'
LabelProgramName.AutoSize = True
LabelProgramName.Font = New Font("Segoe Script", 9.75F, FontStyle.Bold, GraphicsUnit.Point)
LabelProgramName.ForeColor = SystemColors.ControlText
LabelProgramName.Location = New Point(3, 15)
LabelProgramName.Name = "LabelProgramName"
LabelProgramName.Size = New Size(48, 20)
LabelProgramName.TabIndex = 3
LabelProgramName.Text = "Name"
'
' LabelProgramDescription
'
LabelProgramDescription.AutoSize = True
LabelProgramDescription.Font = New Font("Segoe UI Semibold", 9F, FontStyle.Bold, GraphicsUnit.Point)
LabelProgramDescription.ForeColor = SystemColors.ControlText
LabelProgramDescription.Location = New Point(3, 43)
LabelProgramDescription.Name = "LabelProgramDescription"
LabelProgramDescription.Size = New Size(68, 15)
LabelProgramDescription.TabIndex = 4
LabelProgramDescription.Text = "Description"
'
' LabelVersion
'
LabelVersion.AutoSize = True
LabelVersion.Font = New Font("Segoe UI", 9F, FontStyle.Underline, GraphicsUnit.Point)
LabelVersion.ForeColor = SystemColors.ControlText
LabelVersion.Location = New Point(347, 17)
LabelVersion.Name = "LabelVersion"
LabelVersion.Size = New Size(45, 15)
LabelVersion.TabIndex = 5
LabelVersion.Text = "Version"
'
' LinkLabelReadtheWiki
'
LinkLabelReadtheWiki.AutoSize = True
LinkLabelReadtheWiki.Font = New Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point)
LinkLabelReadtheWiki.Location = New Point(313, 43)
LinkLabelReadtheWiki.Name = "LinkLabelReadtheWiki"
LinkLabelReadtheWiki.Size = New Size(79, 15)
LinkLabelReadtheWiki.TabIndex = 6
LinkLabelReadtheWiki.TabStop = True
LinkLabelReadtheWiki.Text = "Read the Wiki"
'
' Panel1
'
Panel1.BackColor = SystemColors.Control
Panel1.Controls.Add(LabelProgramDescription)
Panel1.Controls.Add(LabelProgramName)
Panel1.Controls.Add(LinkLabelReadtheWiki)
Panel1.Controls.Add(LabelVersion)
Panel1.Location = New Point(106, 12)
Panel1.Name = "Panel1"
Panel1.Size = New Size(409, 93)
Panel1.TabIndex = 7
'
' LicenseRichTextBox
'
LicenseRichTextBox.Font = New Font("Cambria", 9.75F, FontStyle.Regular, GraphicsUnit.Point)
LicenseRichTextBox.Location = New Point(12, 113)
LicenseRichTextBox.Name = "LicenseRichTextBox"
LicenseRichTextBox.ReadOnly = True
LicenseRichTextBox.Size = New Size(503, 329)
LicenseRichTextBox.TabIndex = 1
LicenseRichTextBox.Text = "License notice"
'
' AboutBox
'
AutoScaleDimensions = New SizeF(7F, 15F)
AutoScaleMode = AutoScaleMode.Font
BackColor = Color.Gainsboro
ClientSize = New Size(526, 453)
Controls.Add(LicenseRichTextBox)
Controls.Add(Panel1)
Controls.Add(PictureBoxLogo)
FormBorderStyle = FormBorderStyle.FixedSingle
Icon = CType(resources.GetObject("$this.Icon"), Icon)
MaximizeBox = False
MinimizeBox = False
Name = "AboutBox"
ShowInTaskbar = False
StartPosition = FormStartPosition.CenterScreen
Text = "About"
CType(PictureBoxLogo, ComponentModel.ISupportInitialize).EndInit()
Panel1.ResumeLayout(False)
Panel1.PerformLayout()
ResumeLayout(False)
End Sub
Friend WithEvents PictureBoxLogo As PictureBox
Friend WithEvents LabelProgramName As Label
Friend WithEvents LabelProgramDescription As Label
Friend WithEvents LabelVersion As Label
Friend WithEvents LinkLabelReadtheWiki As LinkLabel
Friend WithEvents Panel1 As Panel
Friend WithEvents LicenseRichTextBox As RichTextBox
End Class

758
RPST GUI/RPST/AboutBox.resx Normal file
View File

@@ -0,0 +1,758 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="PictureBoxLogo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAN
0AAADdABEGw9BwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAFPuSURBVHhe7d0J
nBxVvTZ+ExbZVPTPX0Svonjd5b0qV0UEARXR60Xvq2yyi4DsskR2QfZNEEE2gbAIAgEEAgQIS4BAQEh6
uqfXmUkySaYHbyCsCXuSep9fJyOdzjMz3dW1nKp++Hy+H+AH6e4659T5nao6dc57PM8TERGRDkODIiIi
km40KCIiIulGgyIiIpJuNCgiIiLpRoMiIiKSbjQoIiIi6UaDIiIikm40KCIiIulGgyIiIpJuNCgiIiLp
RoMiIiKSbjQoIiIi6UaDIiIikm40KCIiIulGgyIiIpJuNCgiIiLpRoMiIiKSbjQoIiIi6UaDIiIikm40
KCIiIulGgyIiIpJuNCgiIiLpRoMiIiKSbjQoIiIi6UaDIiIikm40KCIiIulGgyIiIpJuNCgiIiLpRoMi
IiKtGhwcXA0+Bz+B38Jf4Ba4Dx6HHMyG5+B/oQ+64DG4B26GP8Mh8APYEMaw75L20aCIiMhILDHDf8Dh
cDv0wDvgBex1sIHD9fAr+BT7PdI6GhQREWmE5LsR7A8T4HlgCTsK/XAV7AofZr9VRkeDIiIiBgl2PTgI
ngKWjOO2GCbBzrAmOwbhaFBERDoXEul7YXu4E94Glnhd9AqMh61AcwdGQYMiItJ5kDTXhiPgWWAJNkls
3oDdFRjLjlU0ABAR6XhIkuvC72ABsGSaZL2wN6zGjr2T0aCIiKQfkqJd8Z8GduucJc80mQf7gu4ILEeD
IiKSbkiEP1ueFFmyTLOnYRNWJp2GBkVEJJ2Q/D4N9y5Php1qCVwM67Iy6hQ0KCIi6YJkt8rMmTMvx9/f
AJYUO9F82JmVVyegQRERSQ8k/s/n8/nn+/v7WRKUwcEroOPWEKBBERFJh56enoO7uroWFwoFlvjkXd3w
eVaGaUWDIiKSbEhmq5RKpftnzJjhmXnz5rGkJytaCLux8kwjGhQRkeTCVf9H8vn8/OnTp3umUqmwZCfD
Ox9Sv5IgDYqISDL19vZ+JpfLLRpK/plMxqtWqyzJychugFQvHkSDIiKSPH19fZtks9k3h5K/QYwlN2nO
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
WNsXiQMNisQNg4GvlkqlK3GlNCuTySxmnaqIq2YsW463H2340r6+vs+zNi4SNxoUcU25XP4hrp5uRKc6
gAGBXi8U53R1db2K9vlQoVDYA/+uXffEeTQo4rJKpTIWA4KdMCC4Ex3uc1pvQOKAhP8a2t9TcCza4EdZ
WxVxGQ2KJAkGBGtgQPBrXHk9aJMJ9ZqhhCGTybyBZD8jn8+fguSv9/Ml8WhQJMkwIFjXlibGgOCJbDa7
kHXmIqOxV/SQ8JHv8+eiHX2OtTWRJKNBkTTBgOBjpVLpVAwIZtgbBnpkII2sTaBtvIw2Mr1YLJ6NpL8x
a0siaUKDImlXLpe3wKDgdHT4D+Eqr9rV1fU2SwySPpbscUW/AEn+SST7P6IdfA9xvY8vHYcGRToRBgXr
wz5ICtcjORSQJF7V3YJkQ/0tweDuOVzdP4qB3umo028hrhn6IkCDIrIMksUYDAq2xFXiWYVCYQqSyCAS
yjv1SUbiZ2tF2FU96mc6Bm/j8fe9Ed8IdGUvMgwaFJGRYUDwUdjf1iZAwiniCvN5DAze1B2DcKGMbWLe
cxiMdaHsr0Md2NsfG7I6EpGR0aCI+IfE9GEkpm3hSPzz5UhQ92OQkEfi+ieuUl/D1eoSltw6HQZPi5Hg
X8Fgag7K6h8oslvgTNgd5bYx/p81WHmLiD80KCLhwuBgrXK5/C3YH/98PgYKd2CgMB2Jb569qZCWxwxI
6rXb8zie15DEn8exzQRbPGcCEvsZ+Puu+O9fxv/7PlZOIhIeGhSR+NmKh/B52BwDhe1gNzgQjsag4TS4
EK7C4OEmmIgBxIMwDTJIrkWYiQQ7APORdF+EV5GEX7fb6LDY7kTAUkvQ8A5ib4L994X4/16GBfC/UMWf
7YdeKEAGnsTnPgC34nuuwHeeg99gv+tX9lt7enq+MXv27H8bHBwcw45NROJHgyIiIpJuNCgiIiLpRoMi
IiKSbjQoIiIi6UaDIiIikm40KCIiIulGgyIiIpJuNCgiIiLpRoMiIiKSbjQoIiIi6UaDIiIikm40KCIi
IulGgyIiIpJuNCgiIiLpRoMiIiKSbjQoIiIi6UaDIiIikm40KCIiIulGgyIiIpJuNCgiIiLpRoMiIiKS
bjQoIiIi6UaDIiIikm40KCIiIulGgyIiIpJuNCgiIiLpRoMiIiKSbjQoIiIi6UaDIiIikmbee/4fFi8j
zX+PctYAAAAASUVORK5CYII=
</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

53
RPST GUI/RPST/AboutBox.vb Normal file
View File

@@ -0,0 +1,53 @@
Imports System.Runtime
Public Class AboutBox
ReadOnly settings As New SettingsManager()
Public Property LicenseText As String = $"MIT License
{My.Application.Info.Copyright}
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the ""Software""), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
''' <summary>
''' Handles the Load event for the AboutBox form.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The event data.</param>
Private Sub AboutBox_Load(sender As Object, e As EventArgs) Handles MyBase.Load
settings.LoadSettings()
settings.ToggleDarkMode(settings.DarkMode)
LabelProgramName.Text = My.Application.Info.ProductName
LabelProgramDescription.Text = "Given a subreddit name and a keyword,
RPST returns all top posts (by default)
that contain the specified keyword."
LabelVersion.Text = $"v{My.Application.Info.Version}"
LicenseRichTextBox.Text = LicenseText
End Sub
''' <summary>
''' Handles the LinkClicked event for the LinkLabelReadtheWiki control.
''' Opens the Wiki URL in the default browser.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The event data.</param>
Private Sub LinkLabelReadtheWiki_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabelReadtheWiki.LinkClicked
Shell("cmd /c start https://github.com/bellingcat/reddit-post-scraping-tool/wiki")
End Sub
End Class

View File

@@ -0,0 +1,50 @@
Imports System.IO
Imports System.Net.Http
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
''' <summary>
''' Handles requests to Reddit and Github APIs.
''' </summary>
Public Class ApiHandler
Public Property LogFile As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "RedditPostScrapingTool", "logs", $"debug.log")
Public Property Headers As String = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15"
Public Property UpdatesEndpoint As String = "https://api.github.com/repos/bellingcat/reddit-post-scraping-tool/releases/latest"
''' <summary>
''' Scrape Reddit data.
''' </summary>
''' <returns>Json object containing scraped data.</returns>
Public Function ScrapeReddit(subreddit As String, listing As String, limit As Integer, timeframe As String) As JObject
Dim ApiEndpoint As String = $"https://reddit.com/r/{subreddit}/{listing}.json?limit={limit}&t={timeframe}"
Return GetJObjectFromEndpoint(ApiEndpoint)
End Function
''' <summary>
''' Gets remote version information from the repository release page.
''' </summary>
''' <returns>Json object containing update data.</returns>
Public Function CheckUpdates() As JObject
Return GetJObjectFromEndpoint(UpdatesEndpoint)
End Function
Private Function GetJObjectFromEndpoint(endpoint As String) As JObject
Try
Using httpClient As New HttpClient()
httpClient.DefaultRequestHeaders.Add("User-Agent", headers)
Dim response As HttpResponseMessage = httpClient.GetAsync(endpoint).Result
If response.IsSuccessStatusCode Then
Dim json As String = response.Content.ReadAsStringAsync().Result
Dim data As JObject = JsonConvert.DeserializeObject(Of JObject)(json)
Return data
Else
MessageBox.Show(response.ReasonPhrase, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End Using
Catch ex As Exception
My.Computer.FileSystem.WriteAllText(LogFile, $"{DateTime.Now}: {ex}{Environment.NewLine}", True)
MessageBox.Show($"{ex.Message}. Please see the debug log '{LogFile}' for more information.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Return New JObject()
End Function
End Class

View File

@@ -0,0 +1,29 @@
Imports Microsoft.VisualBasic.ApplicationServices
Namespace My
' The following events are available for MyApplication:
' Startup: Raised when the application starts, before the startup form is created.
' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally.
' UnhandledException: Raised if the application encounters an unhandled exception.
' StartupNextInstance: Raised when launching a single-instance application and the application is already active.
' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
' **NEW** ApplyApplicationDefaults: Raised when the application queries default values to be set for the application.
' Example:
' Private Sub MyApplication_ApplyApplicationDefaults(sender As Object, e As ApplyApplicationDefaultsEventArgs) Handles Me.ApplyApplicationDefaults
'
' ' Setting the application-wide default Font:
' e.Font = New Font(FontFamily.GenericSansSerif, 12, FontStyle.Regular)
'
' ' Setting the HighDpiMode for the Application:
' e.HighDpiMode = HighDpiMode.PerMonitorV2
'
' ' If a splash dialog is used, this sets the minimum display time:
' e.MinimumSplashScreenDisplayTime = 4000
' End Sub
Partial Friend Class MyApplication
End Class
End Namespace

View File

@@ -0,0 +1,67 @@
Imports Newtonsoft.Json.Linq
Public Class DataGridViewHandler
''' <summary>
''' Initializes the DataGridView by clearing any existing data and setting up the necessary columns.
''' </summary>
''' <param name="dataGridView">The DataGridView to be initialized.</param>
Public Shared Sub AddColumn(dataGridView As DataGridView)
' Clear the Columns and Rows before adding Items to them
dataGridView.Rows.Clear()
dataGridView.Columns.Clear()
dataGridView.Columns.Add("PostCount", "INDEX")
dataGridView.Columns.Add("PostAuthor", "AUTHOR")
dataGridView.Columns.Add("PostID", "ID")
dataGridView.Columns.Add("PostText", "TEXT")
dataGridView.Columns.Add("PostSubreddit", "SUBREDDIT")
dataGridView.Columns.Add("SubredditVisibility", "VISIBILITY")
dataGridView.Columns.Add("PostThumbnail", "THUMBNAIL")
dataGridView.Columns.Add("PostIsNSFW", "NSFW")
dataGridView.Columns.Add("PostIsGilded", "GILDED")
dataGridView.Columns.Add("PostUpvotes", "UPVOTES")
dataGridView.Columns.Add("PostUpvoteRatio", "UPVOTE RATIO")
dataGridView.Columns.Add("PostDownvotes", "DOWNVOTES")
dataGridView.Columns.Add("PostAwards", "AWARDS")
dataGridView.Columns.Add("PostTopAward", "TOP AWARD")
dataGridView.Columns.Add("PostIsCrosspostable", "IS CROSS-POSTABLE?")
dataGridView.Columns.Add("PostScore", "SCORE")
dataGridView.Columns.Add("PostCategory", "CATEGORY")
dataGridView.Columns.Add("PostDomain", "DOMAIN")
dataGridView.Columns.Add("PostPermalink", "PERMALINK")
dataGridView.Columns.Add("PostCreatedAt", "CREATED AT")
dataGridView.Columns.Add("PostApprovedAt", "APPROVED ATt")
dataGridView.Columns.Add("PostApprovedBy", "APPROVED BY")
End Sub
Public Shared Sub AddRow(dataGridView As DataGridView, post As JObject, postNumber As Integer)
''' <summary>
''' Adds a row to the DataGridView based on the data from a Reddit post.
''' </summary>
''' <param name="dataGridView">The DataGridView to which the row will be added.</param>
''' <param name="post">A JObject representing the Reddit post.</param>
''' <param name="postNumber">The number of the post.</param>
dataGridView.Rows.Add(postNumber,
post("data")("author"),
post("data")("id"),
post("data")("selftext"),
post("data")("subreddit_name_prefixed"),
post("data")("subreddit_type"),
post("data")("thumbnail"),
post("data")("over_18"),
post("data")("gilded"),
post("data")("ups"),
post("data")("upvote_ratio"),
post("data")("downs"),
post("data")("total_awards_received"),
post("data")("top_awarded_type"),
post("data")("is_crosspostable"),
post("data")("score"),
post("data")("category"),
post("data")("domain"),
post("data")("permalink"),
post("data")("created"),
post("data")("approved_at_utc"),
post("data")("approved_by"))
End Sub
End Class

89
RPST GUI/RPST/DeveloperBox.Designer.vb generated Normal file
View File

@@ -0,0 +1,89 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class DeveloperBox
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Dim resources As ComponentModel.ComponentResourceManager = New ComponentModel.ComponentResourceManager(GetType(DeveloperBox))
AboutMeLinkLabel = New LinkLabel()
LinkLabelBuyMeACoffee = New LinkLabel()
GreetingLabel = New Label()
SuspendLayout()
'
' AboutMeLinkLabel
'
AboutMeLinkLabel.AutoSize = True
AboutMeLinkLabel.BackColor = Color.White
AboutMeLinkLabel.Font = New Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point)
AboutMeLinkLabel.Location = New Point(33, 426)
AboutMeLinkLabel.Name = "AboutMeLinkLabel"
AboutMeLinkLabel.Size = New Size(57, 17)
AboutMeLinkLabel.TabIndex = 0
AboutMeLinkLabel.TabStop = True
AboutMeLinkLabel.Text = "About.me"
'
' LinkLabelBuyMeACoffee
'
LinkLabelBuyMeACoffee.AutoSize = True
LinkLabelBuyMeACoffee.Font = New Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point)
LinkLabelBuyMeACoffee.Location = New Point(33, 451)
LinkLabelBuyMeACoffee.Name = "LinkLabelBuyMeACoffee"
LinkLabelBuyMeACoffee.Size = New Size(101, 17)
LinkLabelBuyMeACoffee.TabIndex = 1
LinkLabelBuyMeACoffee.TabStop = True
LinkLabelBuyMeACoffee.Text = "Buy Me A Coffee"
'
' GreetingLabel
'
GreetingLabel.AutoSize = True
GreetingLabel.Font = New Font("Ink Free", 27.75F, FontStyle.Bold, GraphicsUnit.Point)
GreetingLabel.Location = New Point(62, 22)
GreetingLabel.Name = "GreetingLabel"
GreetingLabel.Size = New Size(355, 46)
GreetingLabel.TabIndex = 3
GreetingLabel.Text = "👋🏾Hello, I'm Ritchie"
'
' DeveloperForm
'
AutoScaleDimensions = New SizeF(7F, 15F)
AutoScaleMode = AutoScaleMode.Font
BackgroundImage = CType(resources.GetObject("$this.BackgroundImage"), Image)
ClientSize = New Size(510, 510)
Controls.Add(LinkLabelBuyMeACoffee)
Controls.Add(AboutMeLinkLabel)
Controls.Add(GreetingLabel)
FormBorderStyle = FormBorderStyle.FixedSingle
MaximizeBox = False
MinimizeBox = False
Name = "DeveloperForm"
ShowIcon = False
ShowInTaskbar = False
StartPosition = FormStartPosition.CenterParent
Text = "Developer"
ResumeLayout(False)
PerformLayout()
End Sub
Friend WithEvents AboutMeLinkLabel As LinkLabel
Friend WithEvents LinkLabelBuyMeACoffee As LinkLabel
Friend WithEvents PictureBox1 As PictureBox
Friend WithEvents GreetingLabel As Label
End Class

View File

@@ -0,0 +1,889 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
/9j/4AAQSkZJRgABAQEAAAAAAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdCIFhZ
WiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAA
AHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAA
AChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAA
AFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAA
AAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAA
E9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAA
ABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAgAC
AAMBIgACEQEDEQH/xAAfAAEAAQQDAQEBAAAAAAAAAAAABwQFBggDCQoCCwH/xABFEAABAwMCBAQDBQcC
BAUFAQEBAgMEAAURBiEHEjFBCBNRYRQicQkVMoGRI0KhscHR8FJiChYk4RczcoLxJUOywtI0kv/EABwB
AQACAwEBAQAAAAAAAAAAAAAFBgMEBwIBCP/EAD8RAAEEAQMCBAMFBwEIAgMAAAEAAgMRBBIhMQVBBhNR
YSJxgQcykaHBFCNCUrHR8BUWJENicpLh8TOCNGOy/9oADAMBAAIRAxEAPwD1YUpSrQqulKUoiUpSiJSl
KIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpS
iJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUo
iUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKI
lKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJ
SlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiU
pSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlK
UoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSl
KIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpS
iJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUo
iUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKI
lKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJ
SlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiU
pSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlK
UoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSl
KIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpS
iJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUo
iUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKI
lKUoiUpSiJSlKIlKUoiUpSiJSlW67Xi02GA/db5c7fZ7ZFCDIuFzmR4EJjzHEtNh2TKcaZQXXVoabSpY
Ljq0NoClqSk/HOa0FznBrWgkucQAAOSSaAA7kr01rnuaxjXPe4hrWNBc5ziaDWtAJJJ2AAJJ4VxpWg3F
fx46G0uXbdw9jtanuKQgm9XVuXDsLWfgH8M25Kol5uPmMuToTwkLsPwktlmVHVdYiyFaY6u+0G4oy1ST
br5CsrD6HG/hbVZrYENpWtxZ8iVcI9wuTDiErSw26meXUoabUF+cXX3K3meLOj4jnNEz8lzdj+zNa9l+
gkc9jXciywuG/Jo1d+mfZ54l6lGyX9mjwo3kV+2ufHIWmqd5LI5JGk7gNkDHWDYAIJ7xwCTgDJOwA6k+
lYhdeIOgrFLVAvmt9IWacgKK4V11LZrdLSEuuMqKo0yay8kJeZdaUSgAOtONn50KA83GrvFRr/UrK4V3
1lqO6w8nEa6X+63FkJ8xDyUpZmSpDPKHW0OABOA4htey2kkRYri5JUSoyDkkk4cx1OegVjuagZvHsX/A
w216yz79v4WsAHfh7uPdW7F+yHILQ7M6mbIBDMfG4ut9cshsb8eWCvVRbdXaUvSGHLPqfT12bleb8M5b
b1bZyJHklxL3kKiyXUveUWnQ75ZV5ZacC8FCsX5t1t5RS04h1QBUUtrStQSCASQkk4BIBOMZI9a8ly+L
0lJKfPJ9+Y9iR6/19KpTxdkZKfNUem4Vg7j9O/cY2rG3x+NteCw776cmvT1jcR3Pf9VmP2OyOvy+rPYO
wkw2uNkju3JZYANcCyL2Gw9cCkLQQFpUgkBQCklJKTkBQyBkEggEbbGvmvJdG4quA+Y5LXlK8pClJxsS
Mb5AwCoYGwJO22KmzR/iz4maQMQaf4galgswm1NRYJur8y0tNqYeYS2bPPVLtDjbLch1TDUiE61HkFMt
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
</value>
</data>
</root>

View File

@@ -0,0 +1,17 @@
Public Class DeveloperBox
Private Sub DeveloperForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
GreetingLabel.BackColor = Color.Transparent
AboutMeLinkLabel.BackColor = Color.Transparent
LinkLabelBuyMeACoffee.BackColor = Color.Transparent
End Sub
Private Sub AboutMeLinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles AboutMeLinkLabel.LinkClicked
' I couldn't find a proper way to open a url
' Process.Start() did not work
Shell("cmd /c start https://about.me/rly0nheart")
End Sub
Private Sub BuyMeACoffeeLinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabelBuyMeACoffee.LinkClicked
Shell("cmd /c start https://buymeacoffee.com/_rly0nheart")
End Sub
End Class

311
RPST GUI/RPST/FormMain.Designer.vb generated Normal file
View File

@@ -0,0 +1,311 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class FormMain
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
components = New ComponentModel.Container()
Dim resources As ComponentModel.ComponentResourceManager = New ComponentModel.ComponentResourceManager(GetType(FormMain))
TextBoxKeyword = New TextBox()
TextBoxSubreddit = New TextBox()
ButtonScrape = New Button()
ComboBoxTimeframe = New ComboBox()
ComboBoxListing = New ComboBox()
LabelKeyword = New Label()
LabelSubreddit = New Label()
LabelLimit = New Label()
LabelListing = New Label()
LabelTimeframe = New Label()
ContextMenuStripRightClick = New ContextMenuStrip(components)
ToolStripMenuItemDarkMode = New ToolStripMenuItem()
ToolStripMenuItemSavePosts = New ToolStripMenuItem()
ToolStripMenuItemtoJSON = New ToolStripMenuItem()
ToolStripMenuItemtoCSV = New ToolStripMenuItem()
ToolStripMenuItemAbout = New ToolStripMenuItem()
ToolStripMenuItemDeveloper = New ToolStripMenuItem()
ToolStripMenuItemCheckUpdates = New ToolStripMenuItem()
ToolStripMenuItemQuit = New ToolStripMenuItem()
NumericUpDownLimit = New NumericUpDown()
ToolTip = New ToolTip(components)
ContextMenuStripRightClick.SuspendLayout()
CType(NumericUpDownLimit, ComponentModel.ISupportInitialize).BeginInit()
SuspendLayout()
'
' TextBoxKeyword
'
TextBoxKeyword.BackColor = SystemColors.Window
TextBoxKeyword.ForeColor = SystemColors.WindowText
TextBoxKeyword.Location = New Point(118, 20)
TextBoxKeyword.Name = "TextBoxKeyword"
TextBoxKeyword.PlaceholderText = "Keyword"
TextBoxKeyword.Size = New Size(100, 23)
TextBoxKeyword.TabIndex = 0
ToolTip.SetToolTip(TextBoxKeyword, "Enter the keyword you want to search for.")
'
' TextBoxSubreddit
'
TextBoxSubreddit.Location = New Point(118, 49)
TextBoxSubreddit.Name = "TextBoxSubreddit"
TextBoxSubreddit.PlaceholderText = "Subreddit"
TextBoxSubreddit.Size = New Size(100, 23)
TextBoxSubreddit.TabIndex = 4
ToolTip.SetToolTip(TextBoxSubreddit, "Provide the subreddit to search in.")
'
' ButtonScrape
'
ButtonScrape.Location = New Point(167, 174)
ButtonScrape.Name = "ButtonScrape"
ButtonScrape.Size = New Size(51, 28)
ButtonScrape.TabIndex = 6
ButtonScrape.Text = "Scrape"
ToolTip.SetToolTip(ButtonScrape, "You can also just hit ENTER to start scraping.")
ButtonScrape.UseVisualStyleBackColor = True
'
' ComboBoxTimeframe
'
ComboBoxTimeframe.AutoCompleteCustomSource.AddRange(New String() {"Hour", "Day", "Week", "Month", "Year"})
ComboBoxTimeframe.AutoCompleteMode = AutoCompleteMode.Append
ComboBoxTimeframe.AutoCompleteSource = AutoCompleteSource.CustomSource
ComboBoxTimeframe.FormattingEnabled = True
ComboBoxTimeframe.Items.AddRange(New Object() {"Hour", "Day", "Week", "Month", "Year"})
ComboBoxTimeframe.Location = New Point(118, 136)
ComboBoxTimeframe.Name = "ComboBoxTimeframe"
ComboBoxTimeframe.Size = New Size(100, 23)
ComboBoxTimeframe.TabIndex = 8
ComboBoxTimeframe.Text = "All"
ToolTip.SetToolTip(ComboBoxTimeframe, "Select the time period for the posts. Default value is `All`.")
'
' ComboBoxListing
'
ComboBoxListing.AutoCompleteCustomSource.AddRange(New String() {"Controversial", "Hot", "Best", "New", "Rising"})
ComboBoxListing.AutoCompleteMode = AutoCompleteMode.Append
ComboBoxListing.AutoCompleteSource = AutoCompleteSource.CustomSource
ComboBoxListing.FormattingEnabled = True
ComboBoxListing.Items.AddRange(New Object() {"Controversial", "Hot", "Best", "New", "Rising"})
ComboBoxListing.Location = New Point(118, 107)
ComboBoxListing.Name = "ComboBoxListing"
ComboBoxListing.Size = New Size(100, 23)
ComboBoxListing.TabIndex = 9
ComboBoxListing.Text = "Top"
ToolTip.SetToolTip(ComboBoxListing, "Choose the type of post listings. Default value is `Top`.")
'
' LabelKeyword
'
LabelKeyword.AutoEllipsis = True
LabelKeyword.Font = New Font("Segoe UI Semibold", 9F, FontStyle.Bold Or FontStyle.Underline, GraphicsUnit.Point)
LabelKeyword.ForeColor = Color.Black
LabelKeyword.Location = New Point(19, 23)
LabelKeyword.Name = "LabelKeyword"
LabelKeyword.Size = New Size(71, 20)
LabelKeyword.TabIndex = 10
LabelKeyword.Text = "Keyword:"
'
' LabelSubreddit
'
LabelSubreddit.AutoEllipsis = True
LabelSubreddit.Font = New Font("Segoe UI Semibold", 9F, FontStyle.Bold Or FontStyle.Underline, GraphicsUnit.Point)
LabelSubreddit.ForeColor = Color.Black
LabelSubreddit.Location = New Point(19, 52)
LabelSubreddit.Name = "LabelSubreddit"
LabelSubreddit.Size = New Size(71, 23)
LabelSubreddit.TabIndex = 11
LabelSubreddit.Text = "Subreddit:"
'
' LabelLimit
'
LabelLimit.AutoEllipsis = True
LabelLimit.Font = New Font("Segoe UI Semibold", 9F, FontStyle.Bold Or FontStyle.Underline, GraphicsUnit.Point)
LabelLimit.ForeColor = Color.Black
LabelLimit.Location = New Point(19, 75)
LabelLimit.Name = "LabelLimit"
LabelLimit.Size = New Size(56, 23)
LabelLimit.TabIndex = 12
LabelLimit.Text = "Limit:"
'
' LabelListing
'
LabelListing.AutoEllipsis = True
LabelListing.Font = New Font("Segoe UI Semibold", 9F, FontStyle.Bold Or FontStyle.Underline, GraphicsUnit.Point)
LabelListing.ForeColor = Color.Black
LabelListing.Location = New Point(19, 107)
LabelListing.Name = "LabelListing"
LabelListing.Size = New Size(56, 23)
LabelListing.TabIndex = 13
LabelListing.Text = "Listing:"
'
' LabelTimeframe
'
LabelTimeframe.AutoEllipsis = True
LabelTimeframe.Font = New Font("Segoe UI Semibold", 9F, FontStyle.Bold Or FontStyle.Underline, GraphicsUnit.Point)
LabelTimeframe.ForeColor = Color.Black
LabelTimeframe.Location = New Point(19, 136)
LabelTimeframe.Name = "LabelTimeframe"
LabelTimeframe.Size = New Size(81, 23)
LabelTimeframe.TabIndex = 14
LabelTimeframe.Text = "Timeframe:"
'
' ContextMenuStripRightClick
'
ContextMenuStripRightClick.Items.AddRange(New ToolStripItem() {ToolStripMenuItemDarkMode, ToolStripMenuItemSavePosts, ToolStripMenuItemAbout, ToolStripMenuItemDeveloper, ToolStripMenuItemCheckUpdates, ToolStripMenuItemQuit})
ContextMenuStripRightClick.Name = "ContextMenuStrip1"
ContextMenuStripRightClick.Size = New Size(154, 136)
'
' ToolStripMenuItemDarkMode
'
ToolStripMenuItemDarkMode.AutoToolTip = True
ToolStripMenuItemDarkMode.CheckOnClick = True
ToolStripMenuItemDarkMode.Image = CType(resources.GetObject("ToolStripMenuItemDarkMode.Image"), Image)
ToolStripMenuItemDarkMode.Name = "ToolStripMenuItemDarkMode"
ToolStripMenuItemDarkMode.Size = New Size(153, 22)
ToolStripMenuItemDarkMode.Text = "Dark Mode"
'
' ToolStripMenuItemSavePosts
'
ToolStripMenuItemSavePosts.AutoToolTip = True
ToolStripMenuItemSavePosts.DropDownItems.AddRange(New ToolStripItem() {ToolStripMenuItemtoJSON, ToolStripMenuItemtoCSV})
ToolStripMenuItemSavePosts.Image = CType(resources.GetObject("ToolStripMenuItemSavePosts.Image"), Image)
ToolStripMenuItemSavePosts.Name = "ToolStripMenuItemSavePosts"
ToolStripMenuItemSavePosts.Size = New Size(153, 22)
ToolStripMenuItemSavePosts.Text = "Save Posts"
ToolStripMenuItemSavePosts.ToolTipText = "Save found posts to..."
'
' ToolStripMenuItemtoJSON
'
ToolStripMenuItemtoJSON.AutoToolTip = True
ToolStripMenuItemtoJSON.CheckOnClick = True
ToolStripMenuItemtoJSON.Image = CType(resources.GetObject("ToolStripMenuItemtoJSON.Image"), Image)
ToolStripMenuItemtoJSON.Name = "ToolStripMenuItemtoJSON"
ToolStripMenuItemtoJSON.Size = New Size(116, 22)
ToolStripMenuItemtoJSON.Text = "to JSON"
'
' ToolStripMenuItemtoCSV
'
ToolStripMenuItemtoCSV.AutoToolTip = True
ToolStripMenuItemtoCSV.Enabled = False
ToolStripMenuItemtoCSV.Image = CType(resources.GetObject("ToolStripMenuItemtoCSV.Image"), Image)
ToolStripMenuItemtoCSV.Name = "ToolStripMenuItemtoCSV"
ToolStripMenuItemtoCSV.Size = New Size(116, 22)
ToolStripMenuItemtoCSV.Text = "to CSV"
'
' ToolStripMenuItemAbout
'
ToolStripMenuItemAbout.AutoToolTip = True
ToolStripMenuItemAbout.Image = CType(resources.GetObject("ToolStripMenuItemAbout.Image"), Image)
ToolStripMenuItemAbout.Name = "ToolStripMenuItemAbout"
ToolStripMenuItemAbout.Size = New Size(153, 22)
ToolStripMenuItemAbout.Text = "About"
'
' ToolStripMenuItemDeveloper
'
ToolStripMenuItemDeveloper.AutoToolTip = True
ToolStripMenuItemDeveloper.Image = CType(resources.GetObject("ToolStripMenuItemDeveloper.Image"), Image)
ToolStripMenuItemDeveloper.Name = "ToolStripMenuItemDeveloper"
ToolStripMenuItemDeveloper.Size = New Size(153, 22)
ToolStripMenuItemDeveloper.Text = "Developer"
'
' ToolStripMenuItemCheckUpdates
'
ToolStripMenuItemCheckUpdates.AutoToolTip = True
ToolStripMenuItemCheckUpdates.Image = CType(resources.GetObject("ToolStripMenuItemCheckUpdates.Image"), Image)
ToolStripMenuItemCheckUpdates.Name = "ToolStripMenuItemCheckUpdates"
ToolStripMenuItemCheckUpdates.Size = New Size(153, 22)
ToolStripMenuItemCheckUpdates.Text = "Check Updates"
'
' ToolStripMenuItemQuit
'
ToolStripMenuItemQuit.AutoToolTip = True
ToolStripMenuItemQuit.Image = CType(resources.GetObject("ToolStripMenuItemQuit.Image"), Image)
ToolStripMenuItemQuit.Name = "ToolStripMenuItemQuit"
ToolStripMenuItemQuit.Size = New Size(153, 22)
ToolStripMenuItemQuit.Text = "Quit"
'
' NumericUpDownLimit
'
NumericUpDownLimit.Location = New Point(118, 78)
NumericUpDownLimit.Minimum = New Decimal(New Integer() {5, 0, 0, 0})
NumericUpDownLimit.Name = "NumericUpDownLimit"
NumericUpDownLimit.ReadOnly = True
NumericUpDownLimit.Size = New Size(100, 23)
NumericUpDownLimit.TabIndex = 15
ToolTip.SetToolTip(NumericUpDownLimit, "Set how many posts you want to go through. Default value is `10`.")
NumericUpDownLimit.Value = New Decimal(New Integer() {10, 0, 0, 0})
'
' ToolTip
'
ToolTip.AutoPopDelay = 5000
ToolTip.BackColor = Color.Gainsboro
ToolTip.InitialDelay = 500
ToolTip.ReshowDelay = 100
ToolTip.ToolTipIcon = ToolTipIcon.Info
ToolTip.ToolTipTitle = "Tip"
'
' FormMain
'
AutoScaleDimensions = New SizeF(7F, 15F)
AutoScaleMode = AutoScaleMode.Font
BackColor = SystemColors.Control
ClientSize = New Size(239, 221)
ContextMenuStrip = ContextMenuStripRightClick
Controls.Add(ComboBoxTimeframe)
Controls.Add(TextBoxKeyword)
Controls.Add(LabelTimeframe)
Controls.Add(LabelKeyword)
Controls.Add(ComboBoxListing)
Controls.Add(NumericUpDownLimit)
Controls.Add(LabelListing)
Controls.Add(ButtonScrape)
Controls.Add(LabelLimit)
Controls.Add(LabelSubreddit)
Controls.Add(TextBoxSubreddit)
FormBorderStyle = FormBorderStyle.FixedSingle
Icon = CType(resources.GetObject("$this.Icon"), Icon)
MaximizeBox = False
Name = "FormMain"
StartPosition = FormStartPosition.CenterScreen
Text = "RPST"
ContextMenuStripRightClick.ResumeLayout(False)
CType(NumericUpDownLimit, ComponentModel.ISupportInitialize).EndInit()
ResumeLayout(False)
PerformLayout()
End Sub
Friend WithEvents TextBoxKeyword As TextBox
Friend WithEvents TextBoxSubreddit As TextBox
Friend WithEvents ButtonScrape As Button
Friend WithEvents ComboBoxTimeframe As ComboBox
Friend WithEvents ComboBoxListing As ComboBox
Friend WithEvents LabelKeyword As Label
Friend WithEvents LabelSubreddit As Label
Friend WithEvents LabelLimit As Label
Friend WithEvents LabelListing As Label
Friend WithEvents LabelTimeframe As Label
Friend WithEvents ContextMenuStripRightClick As ContextMenuStrip
Friend WithEvents ToolStripMenuItemSavePosts As ToolStripMenuItem
Friend WithEvents ToolStripMenuItemtoJSON As ToolStripMenuItem
Friend WithEvents ToolStripMenuItemtoCSV As ToolStripMenuItem
Friend WithEvents NumericUpDownLimit As NumericUpDown
Friend WithEvents ToolStripMenuItemDarkMode As ToolStripMenuItem
Friend WithEvents ToolStripMenuItemAbout As ToolStripMenuItem
Friend WithEvents ToolStripMenuItemDeveloper As ToolStripMenuItem
Friend WithEvents ToolStripMenuItemCheckUpdates As ToolStripMenuItem
Friend WithEvents ToolStripMenuItemQuit As ToolStripMenuItem
Friend WithEvents ToolTip As ToolTip
End Class

2224
RPST GUI/RPST/FormMain.resx Normal file

File diff suppressed because it is too large Load Diff

184
RPST GUI/RPST/FormMain.vb Normal file
View File

@@ -0,0 +1,184 @@
Imports System.IO
Imports System.Windows.Forms.VisualStyles.VisualStyleElement
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Public Class FormMain
ReadOnly settings As New SettingsManager()
ReadOnly ApiHandler As New ApiHandler()
''' <summary>
''' Event handler for the form load event.
''' It loads settings, toggles dark mode if necessary, checks for directories, logs first time launch, and sets the form title.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">An EventArgs that contains the event data.</param>
Private Sub FormMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
settings.LoadSettings()
settings.ToggleDarkMode(settings.DarkMode)
Utilities.PathFinder()
Utilities.LogFirstTimeLaunch()
Me.Text = My.Application.Info.AssemblyName
End Sub
''' <summary>
''' Event handler for the 'Dark Mode' checkbox change event.
''' It toggles the dark mode of the application based on the checkbox status.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">An EventArgs that contains the event data.</param>
Private Sub DarkModeToolStripMenuItem_CheckedChanged(sender As Object, e As EventArgs) Handles ToolStripMenuItemDarkMode.CheckedChanged
settings.ToggleDarkMode(ToolStripMenuItemDarkMode.Checked)
End Sub
''' <summary>
''' Event handler for the 'About' menu item click.
''' It shows the 'About' box.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">An EventArgs that contains the event data.</param>
Private Sub ToolStripMenuItemAbout_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItemAbout.Click
AboutBox.Show()
End Sub
''' <summary>
''' Event handler for the 'Developer' menu item click.
''' It shows the 'Developer' dialog box.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">An EventArgs that contains the event data.</param>
Private Sub ToolStripMenuItemDeveloper_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItemDeveloper.Click
DeveloperBox.ShowDialog()
End Sub
''' <summary>
''' Event handler for the 'Check Updates' menu item click.
''' It checks for application updates and provides update information if a newer version is available.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">An EventArgs that contains the event data.</param>
Private Sub ToolStripMenuItemCheckUpdates_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItemCheckUpdates.Click
Dim data As JObject = ApiHandler.CheckUpdates()
If data("tag_name").ToString = My.Application.Info.Version.ToString Then
MessageBox.Show($"You're running the latest version v{My.Application.Info.Version} of {Me.Text}. Check again soon! :)", $"{Me.Text} v{My.Application.Info.Version}", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
Dim confirm As DialogResult = MessageBox.Show($"A new version v{data("tag_name")} of {Me.Text} is available, would you like to get it?
{data("body")}
", $"{Me.Text} v{data("tag_name")}".ToString, MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If confirm = DialogResult.Yes Then
Shell($"cmd /c start {data("html_url")}")
End If
End If
End Sub
''' <summary>
''' Event handler for the 'Quit' menu item click.
''' It asks the user for confirmation and closes the program if the user agrees.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">An EventArgs that contains the event data.</param>
Private Sub ToolStripMenuItemQuit_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItemQuit.Click
Dim result As DialogResult = MessageBox.Show("This will close the program, continue?", "Quit", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = DialogResult.Yes Then
Me.Close()
End If
End Sub
''' <summary>
''' Handles the click event of the ScrapeButton.
''' Collects inputs, fetches Reddit posts based on the inputs,
''' and processes Reddit posts.
''' </summary>
''' <param name="sender">The sender of the event.</param>
''' <param name="e">The EventArgs instance containing the event data.</param>
Private Sub ButtonScrape_Click(sender As Object, e As EventArgs) Handles ButtonScrape.Click
Utilities.ProcessRedditPosts(ToolStripMenuItemtoJSON)
End Sub
''' <summary>
''' Handles the KeyDown event for the TextBoxKeyword.
''' Processes Reddit posts when the Enter key is pressed.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="KeyEventArgs"/> instance containing the event data.</param>
Private Sub TextBoxKeyword_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBoxKeyword.KeyDown
' Check if the Enter key is pressed
If e.KeyCode = Keys.Enter Then
' Prevent the beep sound that usually comes with the Enter key in a single-line TextBox
e.SuppressKeyPress = True
Utilities.ProcessRedditPosts(ToolStripMenuItemtoJSON)
End If
End Sub
''' <summary>
''' Handles the KeyDown event for the TextBoxSubreddit.
''' Processes Reddit posts when the Enter key is pressed.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="KeyEventArgs"/> instance containing the event data.</param>
Private Sub TextBoxSubreddit_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBoxSubreddit.KeyDown
' Check if the Enter key is pressed
If e.KeyCode = Keys.Enter Then
' Prevent the beep sound that usually comes with the Enter key in a single-line TextBox
e.SuppressKeyPress = True
Utilities.ProcessRedditPosts(ToolStripMenuItemtoJSON)
End If
End Sub
''' <summary>
''' Handles the KeyDown event for the NumericUpDownLimit.
''' Processes Reddit posts when the Enter key is pressed.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="KeyEventArgs"/> instance containing the event data.</param>
Private Sub NumericUpDownLimit_KeyDown(sender As Object, e As KeyEventArgs) Handles NumericUpDownLimit.KeyDown
' Check if the Enter key is pressed
If e.KeyCode = Keys.Enter Then
' Prevent the beep sound that usually comes with the Enter key in a single-line TextBox
e.SuppressKeyPress = True
Utilities.ProcessRedditPosts(ToolStripMenuItemtoJSON)
End If
End Sub
''' <summary>
''' Handles the KeyDown event for the ComboBoxListing.
''' Processes Reddit posts when the Enter key is pressed.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="KeyEventArgs"/> instance containing the event data.</param>
Private Sub ComboBoxListing_KeyDown(sender As Object, e As KeyEventArgs) Handles ComboBoxListing.KeyDown
' Check if the Enter key is pressed
If e.KeyCode = Keys.Enter Then
' Prevent the beep sound that usually comes with the Enter key in a single-line TextBox
e.SuppressKeyPress = True
Utilities.ProcessRedditPosts(ToolStripMenuItemtoJSON)
End If
End Sub
''' <summary>
''' Handles the KeyDown event for the ComboBoxTimeframe.
''' Processes Reddit posts when the Enter key is pressed.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="KeyEventArgs"/> instance containing the event data.</param>
Private Sub ComboBoxTimeframe_KeyDown(sender As Object, e As KeyEventArgs) Handles ComboBoxTimeframe.KeyDown
' Check if the Enter key is pressed
If e.KeyCode = Keys.Enter Then
' Prevent the beep sound that usually comes with the Enter key in a single-line TextBox
e.SuppressKeyPress = True
Utilities.ProcessRedditPosts(ToolStripMenuItemtoJSON)
End If
End Sub
End Class

59
RPST GUI/RPST/FormPosts.Designer.vb generated Normal file
View File

@@ -0,0 +1,59 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class FormPosts
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Dim resources As ComponentModel.ComponentResourceManager = New ComponentModel.ComponentResourceManager(GetType(FormPosts))
DataGridViewPosts = New DataGridView()
CType(DataGridViewPosts, ComponentModel.ISupportInitialize).BeginInit()
SuspendLayout()
'
' DataGridViewPosts
'
DataGridViewPosts.BackgroundColor = Color.Gainsboro
DataGridViewPosts.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize
DataGridViewPosts.Dock = DockStyle.Fill
DataGridViewPosts.Location = New Point(0, 0)
DataGridViewPosts.Name = "DataGridViewPosts"
DataGridViewPosts.ReadOnly = True
DataGridViewPosts.RowHeadersVisible = False
DataGridViewPosts.RowTemplate.Height = 25
DataGridViewPosts.Size = New Size(501, 365)
DataGridViewPosts.TabIndex = 3
'
' FormPosts
'
AutoScaleDimensions = New SizeF(7F, 15F)
AutoScaleMode = AutoScaleMode.Font
ClientSize = New Size(501, 365)
Controls.Add(DataGridViewPosts)
Icon = CType(resources.GetObject("$this.Icon"), Icon)
Name = "FormPosts"
ShowInTaskbar = False
StartPosition = FormStartPosition.CenterScreen
Text = "Posts"
CType(DataGridViewPosts, ComponentModel.ISupportInitialize).EndInit()
ResumeLayout(False)
End Sub
Friend WithEvents DataGridViewPosts As DataGridView
End Class

View File

@@ -0,0 +1,393 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@@ -0,0 +1,5 @@
Public Class FormPosts
Private Sub FormResults_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Text = $"{Me.Text} - {FormMain.TextBoxKeyword.Text}, r/{FormMain.TextBoxSubreddit.Text}, {FormMain.NumericUpDownLimit.Text}, {FormMain.ComboBoxListing.Text}, {FormMain.ComboBoxTimeframe.Text}"
End Sub
End Class

21
RPST GUI/RPST/LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Richard Mwewa
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -0,0 +1,39 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
'NOTE: This file is auto-generated; do not modify it directly. To make changes,
' or if you encounter build errors in this file, go to the Project Designer
' (go to Project Properties or double-click the My Project node in
' Solution Explorer), and make changes on the Application tab.
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
Me.HighDpiMode = HighDpiMode.DpiUnaware
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.RPST.FormMain
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>Form1</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

View File

@@ -0,0 +1,63 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("RPST.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,29 @@
Imports Newtonsoft.Json.Linq
Public Class PostsProcessor
Private ReadOnly ApiHandler As New ApiHandler
''' <summary>
''' Fetches Reddit posts based on the given parameters and returns them as a JObject.
''' </summary>
''' <param name="subreddit">The subreddit to fetch posts from.</param>
''' <param name="listing">The type of listing (e.g., "new", "top", etc.).</param>
''' <param name="limit">The maximum number of posts to fetch.</param>
''' <param name="timeframe">The timeframe to consider for the posts (e.g., "day", "week", "month", "year", "all").</param>
''' <returns>A JObject containing the fetched Reddit posts.</returns>
Public Function FetchPosts(subreddit As String, listing As String, limit As Integer, timeframe As String) As JObject
Dim posts As JObject = ApiHandler.ScrapeReddit(subreddit, listing, limit, timeframe)
Return posts
End Function
''' <summary>
''' Checks if the given Reddit post contains the given keyword in its text.
''' </summary>
''' <param name="post">The Reddit post to check.</param>
''' <param name="keyword">The keyword to check for.</param>
''' <returns>True if the post contains the keyword, False otherwise.</returns>
Public Shared Function PostContainsKeyword(post As JObject, keyword As String) As Boolean
Return post("data")("selftext").ToString.ToLower(Globalization.CultureInfo.InvariantCulture).Contains(keyword.ToLower(System.Globalization.CultureInfo.InvariantCulture))
End Function
End Class

29
RPST GUI/RPST/README.md Normal file
View File

@@ -0,0 +1,29 @@
# Reddit Post Scraping Tool
Given a subreddit name and a keyword, this script will return all posts from a specified listing (default is 'top') that contain the provided keyword.
[![Upload Python Package](https://github.com/rly0nheart/reddit-post-scraping-tool/actions/workflows/python-publish.yml/badge.svg)](https://github.com/rly0nheart/reddit-post-scraping-tool/actions/workflows/python-publish.yml) [![CodeQL](https://github.com/rly0nheart/reddit-post-scraping-tool/actions/workflows/codeql.yml/badge.svg)](https://github.com/rly0nheart/reddit-post-scraping-tool/actions/workflows/codeql.yml) ![.Net](https://img.shields.io/badge/.NET-5C2D91?style=flat&logo=.net&logoColor=white) ![Python](https://img.shields.io/badge/python-3670A0?style=flat&logo=python&logoColor=ffdd54)
![Screenshot 2023-02-10 195818](https://user-images.githubusercontent.com/74001397/218163494-245f6676-1fb3-4680-a6b5-bd15fb1dea5e.png)
![Screenshot_20230210_193329](https://user-images.githubusercontent.com/74001397/218158084-9295abb7-df33-4f86-8df8-e109cac7cde6.png)
# Features (GUI)
- [x] Auto dark mode from 6pm - 6am
- [x] Saves results to a JSON
- [ ] Other features coming soon...
# TODO (GUI)
- [ ] Make it a stand alone executable
- [ ] Add manual dark mode option, that will be remembered in all sessions
# Wiki
[Refer to the Wiki](https://github.com/rly0nheart/reddit-post-scraping-tool/wiki) for installation instructions, in addition to all other documentation.
# Note
> This is one of the projects I am working on, while learning Visual Basic, so the implementation/code may be messed up. If that's the case, please feel free to open a pull request using the available templates. Otherwise, enjoy!
# Donations
If you like `Reddit Post Scraping Tool` and would like to show support, you can Buy A Coffee for the developer using the button below
<a href="https://www.buymeacoffee.com/189381184" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a>
Your support will be much appreciated😊

81
RPST GUI/RPST/RPST.vbproj Normal file
View File

@@ -0,0 +1,81 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<StartupObject>RPST.My.MyApplication</StartupObject>
<UseWindowsForms>true</UseWindowsForms>
<MyType>WindowsForms</MyType>
<ApplicationIcon>icon.ico</ApplicationIcon>
<Company>Bellingcat</Company>
<Description>Given a subreddit name and a keyword, RPST (Reddit Post Scraping Tool) returns all top (by default) posts that contain the specified keyword. </Description>
<Copyright>Copyright (c) 2023 Richard Mwewa</Copyright>
<PackageProjectUrl>https://github.com/bellingcat/reddit-post-scraping-tool</PackageProjectUrl>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://github.com/bellingcat/reddit-post-scraping-tool</RepositoryUrl>
<AssemblyVersion>1.6.0.0</AssemblyVersion>
<FileVersion>1.6.0.0</FileVersion>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageRequireLicenseAcceptance>True</PackageRequireLicenseAcceptance>
<Version>1.6.0</Version>
<PackageTags>reddit;scraper;reddit-scraper;osint</PackageTags>
<PackageReleaseNotes></PackageReleaseNotes>
<AnalysisLevel>6.0-recommended</AnalysisLevel>
<PackageId>RPST</PackageId>
<Authors>Richard Mwewa</Authors>
<NeutralLanguage>en</NeutralLanguage>
<Product>$(AssemblyName) (Reddit Post Scraping Tool)</Product>
<AssemblyName>RPST</AssemblyName>
</PropertyGroup>
<ItemGroup>
<Content Include="icon.ico" />
</ItemGroup>
<ItemGroup>
<Import Include="System.Data" />
<Import Include="System.Drawing" />
<Import Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
</ItemGroup>
<ItemGroup>
<Compile Update="My Project\Application.Designer.vb">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Update="My Project\Resources.Designer.vb">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="My Project\Resources.resx">
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Update="LICENSE">
<Pack>True</Pack>
<PackagePath>\</PackagePath>
</None>
<None Update="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Update="README.md">
<Pack>True</Pack>
<PackagePath>\</PackagePath>
</None>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Compile Update="AboutBox.vb">
<SubType>Form</SubType>
</Compile>
<Compile Update="DeveloperBox.vb">
<SubType>Form</SubType>
</Compile>
<Compile Update="FormMain.vb">
<SubType>Form</SubType>
</Compile>
<Compile Update="FormPosts.vb">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
</Project>

206
RPST GUI/RPST/Settings.vb Normal file
View File

@@ -0,0 +1,206 @@
Imports System.IO
Imports System.Text.Json
Imports Newtonsoft.Json.Linq
Public Class SettingsManager
''' <summary>
''' Represents the Dark Mode property.
''' Indicates whether the dark mode is enabled or disabled.
''' </summary>
Public Property DarkMode As Boolean
Private ReadOnly settingsFilePath As String = Path.Combine(Environment.CurrentDirectory, "settings.json")
''' <summary>
''' Loads application settings from the 'settings.json' file.
''' If the settings file doesn't exist, it creates a new file with default settings.
''' </summary>
Public Sub LoadSettings()
' Check if the settings.json file exists
' and load the configurations from it
If File.Exists(settingsFilePath) Then
Dim json As String = File.ReadAllText(settingsFilePath)
Dim options As New JsonSerializerOptions With {.PropertyNameCaseInsensitive = True}
Dim settings = Text.Json.JsonSerializer.Deserialize(Of SettingsManager)(json, options)
Me.DarkMode = settings.DarkMode
FormMain.ToolStripMenuItemDarkMode.Checked = settings.DarkMode
Else
' Settings file does not exist
' Create a new file with default settings 'False'
Dim defaultSettings = New SettingsManager With {.DarkMode = False}
Dim jsonOutput = Text.Json.JsonSerializer.Serialize(defaultSettings)
File.WriteAllText(settingsFilePath, jsonOutput)
Me.DarkMode = False
FormMain.ToolStripMenuItemDarkMode.Checked = False
End If
End Sub
''' <summary>
''' Toggles the Dark Mode setting on or off based on the provided parameter.
''' </summary>
''' <param name="enabled">A Boolean indicating if Dark Mode should be enabled or not.</param>
Public Sub ToggleDarkMode(enabled As Boolean)
Dim json As String = File.ReadAllText(settingsFilePath)
Dim options As New JsonSerializerOptions With {.PropertyNameCaseInsensitive = True}
Dim settings As SettingsManager = JsonSerializer.Deserialize(Of SettingsManager)(json, options)
settings.DarkMode = enabled
SaveSettings(settings)
ApplyTheme()
End Sub
''' <summary>
''' Saves the provided settings to the 'settings.json' file.
''' </summary>
''' <param name="settings">An instance of the SettingsManager containing the configurations to be saved.</param>
Private Sub SaveSettings(settings)
Dim jsonOutput = JsonSerializer.Serialize(settings)
File.WriteAllText(settingsFilePath, jsonOutput)
End Sub
''' <summary>
''' Applies the visual theme based on the Dark Mode setting.
''' If Dark Mode is enabled, a dark theme is applied. If it's disabled, a light theme is set.
''' </summary>
Public Sub ApplyTheme()
Dim DarkMode As Boolean = GetDarkMode()
If DarkMode Then
' Enable dark mode for the Main form
' Background colours (I know 'Colours'/'Colors'😆)
FormMain.BackColor = ColorTranslator.FromHtml("#FF121212")
FormMain.TextBoxSubreddit.BackColor = ColorTranslator.FromHtml("#FF2E2E2E")
FormMain.TextBoxKeyword.BackColor = ColorTranslator.FromHtml("#FF2E2E2E")
FormMain.NumericUpDownLimit.BackColor = ColorTranslator.FromHtml("#FF2E2E2E")
FormMain.NumericUpDownLimit.BackColor = ColorTranslator.FromHtml("#FF2E2E2E")
FormMain.ComboBoxListing.BackColor = ColorTranslator.FromHtml("#FF2E2E2E")
FormMain.ComboBoxTimeframe.BackColor = ColorTranslator.FromHtml("#FF2E2E2E")
' Foreground colours
FormMain.TextBoxKeyword.ForeColor = SystemColors.Control
FormMain.TextBoxSubreddit.ForeColor = SystemColors.Control
FormMain.NumericUpDownLimit.ForeColor = SystemColors.Control
FormMain.NumericUpDownLimit.ForeColor = SystemColors.Control
FormMain.ComboBoxListing.ForeColor = SystemColors.Control
FormMain.ComboBoxTimeframe.ForeColor = SystemColors.Control
FormMain.LabelKeyword.ForeColor = SystemColors.Control
FormMain.LabelSubreddit.ForeColor = SystemColors.Control
FormMain.LabelLimit.ForeColor = SystemColors.Control
FormMain.LabelListing.ForeColor = SystemColors.Control
FormMain.LabelTimeframe.ForeColor = SystemColors.Control
' Enable dark mode on 'Right Click Menu' items
' Background colours
FormMain.ToolStripMenuItemDarkMode.BackColor = ColorTranslator.FromHtml("#FF121212")
FormMain.ToolStripMenuItemSavePosts.BackColor = ColorTranslator.FromHtml("#FF121212")
FormMain.ToolStripMenuItemtoJSON.BackColor = ColorTranslator.FromHtml("#FF121212")
FormMain.ToolStripMenuItemtoCSV.BackColor = ColorTranslator.FromHtml("#FF121212")
FormMain.ToolStripMenuItemAbout.BackColor = ColorTranslator.FromHtml("#FF121212")
FormMain.ToolStripMenuItemDeveloper.BackColor = ColorTranslator.FromHtml("#FF121212")
FormMain.ToolStripMenuItemCheckUpdates.BackColor = ColorTranslator.FromHtml("#FF121212")
FormMain.ToolStripMenuItemQuit.BackColor = ColorTranslator.FromHtml("#FF121212")
' Foreground colours
FormMain.ToolStripMenuItemDarkMode.ForeColor = SystemColors.Control
FormMain.ToolStripMenuItemSavePosts.ForeColor = SystemColors.Control
FormMain.ToolStripMenuItemtoJSON.ForeColor = SystemColors.Control
FormMain.ToolStripMenuItemtoCSV.ForeColor = SystemColors.Control
FormMain.ToolStripMenuItemAbout.ForeColor = SystemColors.Control
FormMain.ToolStripMenuItemDeveloper.ForeColor = SystemColors.Control
FormMain.ToolStripMenuItemCheckUpdates.ForeColor = SystemColors.Control
FormMain.ToolStripMenuItemQuit.ForeColor = SystemColors.Control
' Enable dark mode for the About box
' Background colours
AboutBox.BackColor = ColorTranslator.FromHtml("#FF121212")
AboutBox.LicenseRichTextBox.BackColor = ColorTranslator.FromHtml("#FF2E2E2E")
AboutBox.Panel1.BackColor = ColorTranslator.FromHtml("#FF121212")
' Foreground colours
AboutBox.ForeColor = SystemColors.Control
AboutBox.LicenseRichTextBox.ForeColor = SystemColors.Control
AboutBox.LabelProgramName.ForeColor = SystemColors.Control
AboutBox.LabelProgramDescription.ForeColor = SystemColors.Control
AboutBox.LabelVersion.ForeColor = SystemColors.Control
' If dark mode is enabled, set the 'Dark Mode' text value to 'Light mode'
FormMain.ToolStripMenuItemDarkMode.Text = "Light Mode"
Else
' Disable dark mode for the Main Form
' Background colours
FormMain.BackColor = Color.Gainsboro
FormMain.TextBoxKeyword.BackColor = SystemColors.Control
FormMain.TextBoxSubreddit.BackColor = SystemColors.Control
FormMain.NumericUpDownLimit.BackColor = SystemColors.Control
FormMain.NumericUpDownLimit.BackColor = SystemColors.Control
FormMain.ComboBoxTimeframe.BackColor = SystemColors.Control
FormMain.ComboBoxListing.BackColor = SystemColors.Control
' Foreground colours
FormMain.TextBoxKeyword.ForeColor = ColorTranslator.FromHtml("#FF121212")
FormMain.TextBoxSubreddit.ForeColor = ColorTranslator.FromHtml("#FF121212")
FormMain.NumericUpDownLimit.ForeColor = ColorTranslator.FromHtml("#FF121212")
FormMain.NumericUpDownLimit.ForeColor = ColorTranslator.FromHtml("#FF121212")
FormMain.ComboBoxListing.ForeColor = ColorTranslator.FromHtml("#FF121212")
FormMain.ComboBoxTimeframe.ForeColor = ColorTranslator.FromHtml("#FF121212")
FormMain.LabelKeyword.ForeColor = ColorTranslator.FromHtml("#FF121212")
FormMain.LabelSubreddit.ForeColor = ColorTranslator.FromHtml("#FF121212")
FormMain.LabelLimit.ForeColor = ColorTranslator.FromHtml("#FF121212")
FormMain.LabelListing.ForeColor = ColorTranslator.FromHtml("#FF121212")
FormMain.LabelTimeframe.ForeColor = ColorTranslator.FromHtml("#FF121212")
' Disable dark mode on 'Right Click Menu' items
' Background colours
FormMain.ToolStripMenuItemDarkMode.BackColor = Color.Gainsboro
FormMain.ToolStripMenuItemSavePosts.BackColor = Color.Gainsboro
FormMain.ToolStripMenuItemtoJSON.BackColor = Color.Gainsboro
FormMain.ToolStripMenuItemtoCSV.BackColor = Color.Gainsboro
FormMain.ToolStripMenuItemAbout.BackColor = Color.Gainsboro
FormMain.ToolStripMenuItemDeveloper.BackColor = Color.Gainsboro
FormMain.ToolStripMenuItemCheckUpdates.BackColor = Color.Gainsboro
FormMain.ToolStripMenuItemQuit.BackColor = Color.Gainsboro
' Foreground colours
FormMain.ToolStripMenuItemDarkMode.ForeColor = Color.Black
FormMain.ToolStripMenuItemSavePosts.ForeColor = Color.Black
FormMain.ToolStripMenuItemtoJSON.ForeColor = Color.Black
FormMain.ToolStripMenuItemtoCSV.ForeColor = Color.Black
FormMain.ToolStripMenuItemAbout.ForeColor = Color.Black
FormMain.ToolStripMenuItemDeveloper.ForeColor = Color.Black
FormMain.ToolStripMenuItemCheckUpdates.ForeColor = Color.Black
FormMain.ToolStripMenuItemQuit.ForeColor = Color.Black
' Disable dark mode for the About box
' Background colours
AboutBox.BackColor = Color.Gainsboro
AboutBox.ForeColor = SystemColors.WindowText
AboutBox.LicenseRichTextBox.BackColor = SystemColors.Control
AboutBox.LicenseRichTextBox.ForeColor = SystemColors.WindowText
AboutBox.Panel1.BackColor = Color.Gainsboro
' Foreground colours
AboutBox.Panel1.ForeColor = SystemColors.WindowText
AboutBox.LabelProgramName.ForeColor = SystemColors.WindowText
AboutBox.LabelProgramDescription.ForeColor = SystemColors.WindowText
AboutBox.LabelVersion.ForeColor = SystemColors.WindowText
' If dark mode is disabled, set the 'Light Mode' text value to 'Dark Mode'
FormMain.ToolStripMenuItemDarkMode.Text = "Dark Mode"
End If
End Sub
''' <summary>
''' Retrieves the Dark Mode setting value from 'settings.json'.
''' If the settings file doesn't exist, defaults to returning 'False' (Dark Mode off).
''' </summary>
''' <returns>A Boolean indicating if Dark Mode is enabled or not.</returns>
Private Function GetDarkMode() As Boolean
If File.Exists(settingsFilePath) Then
Dim json As String = File.ReadAllText(settingsFilePath)
Dim settings As JObject = JObject.Parse(json)
Return settings(NameOf(DarkMode)).ToObject(Of Boolean)()
Else
Return False
End If
End Function
End Class

175
RPST GUI/RPST/Utilities.vb Normal file
View File

@@ -0,0 +1,175 @@
Imports System.IO
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Public Class Utilities
''' <summary>
''' Collects user inputs, fetches Reddit posts based on the inputs, checks if posts contain the keyword, and saves posts to a JSON file if necessary.
''' </summary>
''' <param name="JSONToolStripMenuItem">Indicates whether to save the posts to a JSON file.</param>
''' <remarks>
''' This function initializes the DataGridView, iterates over each post, adds the posts containing the keyword to the DataGridView and updates the UI.
''' It also shows a message if the keyword was not found in any of the posts or if the inputs are empty.
''' </remarks>
Public Shared Sub ProcessRedditPosts(JSONToolStripMenuItem As ToolStripMenuItem)
' Collect inputs from the user
Dim inputs = CollectInputs()
If inputs.HasValue Then
' Initialize the DataGridView
DataGridViewHandler.AddColumn(FormPosts.DataGridViewPosts)
' Fetch Reddit posts based on the inputs
Dim processor As New PostsProcessor()
Dim posts As JObject = processor.FetchPosts(inputs.Value.Subreddit, inputs.Value.Listing, inputs.Value.Limit, inputs.Value.Timeframe)
Dim totalPosts As Integer = 0
Dim keywordFound As Boolean = False
' Iterate over each post
For Each post In posts("data")("children")
totalPosts += 1
' Check if the post contains the keyword
If PostsProcessor.PostContainsKeyword(post, inputs.Value.Keyword.ToLower(Globalization.CultureInfo.InvariantCulture)) Then
' Add the post to the DataGridView
DataGridViewHandler.AddRow(FormPosts.DataGridViewPosts, post, totalPosts)
FormPosts.Show()
keywordFound = True
End If
Next
' Check if the keyword was found in any posts
If Not keywordFound Then
MessageBox.Show($"Keyword `{inputs.Value.Keyword}` was not found in any of the " + posts("data")("children").Count.ToString(Globalization.CultureInfo.InvariantCulture) _
+ $" {inputs.Value.Listing} posts from r/{inputs.Value.Subreddit}", "Not Found", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End If
If JSONToolStripMenuItem.Checked Then
' Save posts to a JSON file if the JSONToolStripMenuItem is checked
Utilities.SavePostsToJson(posts("data"))
End If
Else
End If
End Sub
''' <summary>
''' Checks for the existence of the 'logs' directory under the 'RPST' directory within the user's AppData\Roaming folder.
''' If the directory does not exist, it creates one.
''' </summary>
''' <remarks>
''' The directory path is 'C:\Users\<username>\AppData\Roaming\RPST\logs'.
''' If the 'RPST' or 'logs' directories do not exist, the function will create them.
''' If the directories already exist, the function will not perform any actions.
''' </remarks>
Public Shared Sub PathFinder()
Dim directoryPath As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "RPST", "logs")
If Not Directory.Exists(directoryPath) Then
Directory.CreateDirectory(directoryPath)
End If
End Sub
''' <summary>
''' Collects and validates user inputs from StartForm and returns them as a Tuple.
''' </summary>
''' <returns>
''' Tuple containing:
''' Keyword (String) - Keyword entered by user in theFormMain.
''' Subreddit (String) - Subreddit entered by user in theFormMain.
''' Listing (String) - Listing chosen by user in the StartForm, defaults to 'top' if none is selected.
''' Limit (Integer) - Limit entered by user in the StartForm, defaults to 10 if the entered value is over 100.
''' Timeframe (String) - Timeframe chosen by user in the StartForm, defaults to 'all' if none is selected.
''' </returns>
''' <remarks>
''' If keyword or subreddit are empty, Displays a warning and returns nothing.
''' </remarks>
Public Shared Function CollectInputs() As (Keyword As String, Subreddit As String, Listing As String, Limit As Integer, Timeframe As String)?
Dim keyword As String = FormMain.TextBoxKeyword.Text.Trim()
Dim subreddit As String = FormMain.TextBoxSubreddit.Text.Trim()
' Convert the Listing and Subreddit to lowercase using InvariantCulture
Dim listing As String = If(String.IsNullOrEmpty(FormMain.ComboBoxListing.Text), "top", FormMain.ComboBoxListing.Text.ToLower(Globalization.CultureInfo.InvariantCulture).Trim())
Dim timeframe As String = If(String.IsNullOrEmpty(FormMain.ComboBoxTimeframe.Text), "all", FormMain.ComboBoxTimeframe.Text.ToLower(Globalization.CultureInfo.InvariantCulture).Trim())
Dim limit As Integer = FormMain.NumericUpDownLimit.Value
' Validate inputs
If String.IsNullOrEmpty(keyword) AndAlso String.IsNullOrEmpty(subreddit) Then
MessageBox.Show("Keyword and Subreddit fields should not be empty.", "Invalid Inputs", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Return Nothing
ElseIf String.IsNullOrEmpty(keyword) Then
MessageBox.Show("Keyword field should not be empty.", "Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Return Nothing
ElseIf String.IsNullOrEmpty(subreddit) Then
MessageBox.Show("Subreddit field should not be empty.", "Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Return Nothing
End If
Return (keyword, subreddit, listing, limit, timeframe)
End Function
''' <summary>
''' Saves the gives posts' data to a JSON file.
''' </summary>
''' <param name="Posts">The object containing posts to be saved.</param>
''' <remarks>
''' This function allows the user to select a location to save the posts.
''' If the user confirms the save location, the posts will be serialized
''' to JSON with an indented format and written to the chosen file.
''' A success message will be displayed to the user upon successful save.
''' </remarks>
Public Shared Sub SavePostsToJson(Posts As Object)
Dim saveFileDialog As New SaveFileDialog With {
.Filter = "JSON files (*.json)|*.json",
.Title = "Save posts to JSON"
}
If saveFileDialog.ShowDialog() = DialogResult.OK Then
Dim fileName As String = saveFileDialog.FileName
Dim serializerSettings As New JsonSerializerSettings With {
.Formatting = Formatting.Indented
}
Dim json As String = JsonConvert.SerializeObject(Posts, serializerSettings)
File.WriteAllText(fileName, json)
MessageBox.Show($"Posts saved to {fileName}", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
''' <summary>
''' Shows the license notice in a messagebox.
''' </summary>
''' <remarks>
''' The license text is retrieved from the AboutBox.LicenseText property.
''' The messagebox is displayed with the title "License" and an information icon.
''' </remarks>
Public Shared Sub LicenseNotice()
MessageBox.Show(AboutBox.LicenseText, "License", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
''' <summary>
''' Checks if the "first-launch.log" file exists in the directory: C:\Users\<username>\AppData\Roaming\RedditPostScrapingTool\logs.
''' If the file doesn't exist, it creates one. This file is used to determine whether the program has been run before.
''' If the program is being run for the first time, a license notice will be displayed.
''' </summary>
Public Shared Sub LogFirstTimeLaunch()
Dim filePath As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "RPST", "logs", "first-launch.log")
Dim textToWrite As String = $"
{My.Application.Info.AssemblyName}
-------------------------
User: {Environment.UserName}
Host: {Environment.MachineName}
OS: {Environment.OSVersion}
x64: {Environment.Is64BitOperatingSystem}
First launched on: {DateTime.Now}"
If Not File.Exists(filePath) Then
LicenseNotice()
File.WriteAllText(filePath, textToWrite)
Else
End If
End Sub
End Class

BIN
RPST GUI/RPST/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB