├── .editorconfig ├── .gitattributes ├── .gitignore ├── DownloaderExtension ├── DownloaderExtension.cs ├── DownloaderExtension.csproj ├── DownloaderExtension.xaml ├── DownloaderExtension.xaml.cs ├── HttpClientSingleton.cs ├── Info.json └── StreamExtensions.cs ├── ElAmigosModule ├── ElAmigosModule.cs ├── ElAmigosModule.csproj └── Info.json ├── FitGirlModule └── FitGirlModule │ ├── FitGirlModule.cs │ ├── FitGirlModule.csproj │ └── Info.json ├── HexRomsModule ├── HexRomsModule.cs ├── HexRomsModule.csproj └── Info.json ├── IModule ├── IModule.cs └── IModule.csproj ├── README.md ├── RPGOnlyModule ├── Info.json ├── RPGOnlyModule.cs └── RPGOnlyModule.csproj ├── STP_Setup ├── Icon.ico ├── Product.wxs ├── STP_Setup.wax ├── STP_Setup.wixproj └── license.rtf ├── SimpleThingsProvider.sln ├── TPBModule ├── Info.json ├── TPBModule.cs └── TPBModule.csproj ├── TorrentScraper ├── AboutWindow.xaml ├── AboutWindow.xaml.cs ├── AlertClass.cs ├── App.config ├── App.xaml ├── BannedWords.cs ├── FilePathUtils.cs ├── HelpWindow.xaml ├── HelpWindow.xaml.cs ├── IExtension.cs ├── IModule.cs ├── JsonSettings.cs ├── LinksWindow.xaml ├── LinksWindow.xaml.cs ├── Logger.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── NSFWWords.json ├── Results.cs ├── Settings.Designer.cs ├── Settings.settings ├── SettingsWindow.xaml ├── SettingsWindow.xaml.cs ├── SimpleThingsProvider.csproj ├── Utils.cs ├── WebsiteStatusWindow.xaml ├── WebsiteStatusWindow.xaml.cs ├── data │ ├── ControlzEx.dll │ ├── Discord.png │ ├── DownloadIcon.png │ ├── Github.png │ ├── Icon.ico │ ├── Icon.png │ ├── Loading.gif │ ├── MahApps.Metro.dll │ ├── Microsoft.Xaml.Behaviors.dll │ ├── NSFWWords.json │ ├── Patreon.png │ ├── Reddit.png │ ├── Styles │ │ ├── Controls.Buttons.xaml │ │ ├── Controls.Calendar.xaml │ │ ├── Controls.CheckBox.xaml │ │ ├── Controls.ComboBox.xaml │ │ ├── Controls.ContentControl.xaml │ │ ├── Controls.ContextMenu.xaml │ │ ├── Controls.DataGrid.xaml │ │ ├── Controls.DatePicker.xaml │ │ ├── Controls.Expander.xaml │ │ ├── Controls.FlatButton.xaml │ │ ├── Controls.FlatSlider.xaml │ │ ├── Controls.GridSplitter.xaml │ │ ├── Controls.GroupBox.xaml │ │ ├── Controls.Hyperlink.xaml │ │ ├── Controls.Label.xaml │ │ ├── Controls.ListBox.xaml │ │ ├── Controls.ListView.xaml │ │ ├── Controls.Menu.xaml │ │ ├── Controls.MenuItem.xaml │ │ ├── Controls.Page.xaml │ │ ├── Controls.PasswordBox.xaml │ │ ├── Controls.ProgressBar.xaml │ │ ├── Controls.RadioButton.xaml │ │ ├── Controls.RichTextBox.xaml │ │ ├── Controls.Scrollbars.xaml │ │ ├── Controls.Shadows.xaml │ │ ├── Controls.Shared.xaml │ │ ├── Controls.Slider.xaml │ │ ├── Controls.StatusBar.xaml │ │ ├── Controls.TabControl.xaml │ │ ├── Controls.TextBlock.xaml │ │ ├── Controls.TextBox.xaml │ │ ├── Controls.Toolbar.xaml │ │ ├── Controls.Tooltip.xaml │ │ ├── Controls.TreeView.xaml │ │ ├── Controls.ValidationError.xaml │ │ ├── Controls.xaml │ │ └── Fonts.xaml │ ├── WebScraping.png │ └── Youtube.png └── preview.png ├── Utils ├── BannedWords.cs ├── Logger.cs ├── Results.cs ├── Settings.Designer.cs ├── Settings.settings └── Utils.csproj ├── VideoDownloaderExtension ├── App.xaml ├── App.xaml.cs ├── AssemblyInfo.cs ├── Info.json ├── PercentageConverter.cs ├── VideoDownloaderExtension.cs ├── VideoDownloaderExtension.csproj ├── VideoDownloaderExtension.xaml └── VideoDownloaderExtension.xaml.cs ├── View ├── AboutWindow.xaml ├── AboutWindow.xaml.cs ├── HelpWindow.xaml ├── HelpWindow.xaml.cs ├── LinksWindow.xaml ├── LinksWindow.xaml.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── SettingsWindow.xaml ├── SettingsWindow.xaml.cs ├── View.csproj ├── WebsiteStatusWindow.xaml ├── WebsiteStatusWindow.xaml.cs └── data │ ├── Discord.png │ ├── DownloadIcon.png │ ├── Github.png │ ├── Icon.ico │ ├── Icon.png │ ├── Loading.gif │ ├── Patreon.png │ ├── Reddit.png │ ├── WebScraping.png │ └── Youtube.png ├── VimmslairModule ├── Info.json ├── VimmslairModule.cs └── VimmslairModule.csproj ├── ZipertoModule ├── Info.json ├── ZipertoModule.cs └── ZipertoModule.csproj └── x1337Module ├── Info.json ├── x1337Module.cs └── x1337Module.csproj /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.cs] 2 | 3 | # CS8618: Il campo non nullable deve contenere un valore non Null all'uscita dal costruttore. Provare a dichiararlo come nullable. 4 | dotnet_diagnostic.CS8618.severity = none 5 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Oo]ut/ 33 | [Ll]og/ 34 | [Ll]ogs/ 35 | 36 | # Visual Studio 2015/2017 cache/options directory 37 | .vs/ 38 | # Uncomment if you have tasks that create the project's static files in wwwroot 39 | #wwwroot/ 40 | 41 | # Visual Studio 2017 auto generated files 42 | Generated\ Files/ 43 | 44 | # MSTest test Results 45 | [Tt]est[Rr]esult*/ 46 | [Bb]uild[Ll]og.* 47 | 48 | # NUnit 49 | *.VisualState.xml 50 | TestResult.xml 51 | nunit-*.xml 52 | 53 | # Build Results of an ATL Project 54 | [Dd]ebugPS/ 55 | [Rr]eleasePS/ 56 | dlldata.c 57 | 58 | # Benchmark Results 59 | BenchmarkDotNet.Artifacts/ 60 | 61 | # .NET Core 62 | project.lock.json 63 | project.fragment.lock.json 64 | artifacts/ 65 | 66 | # ASP.NET Scaffolding 67 | ScaffoldingReadMe.txt 68 | 69 | # StyleCop 70 | StyleCopReport.xml 71 | 72 | # Files built by Visual Studio 73 | *_i.c 74 | *_p.c 75 | *_h.h 76 | *.ilk 77 | *.meta 78 | *.obj 79 | *.iobj 80 | *.pch 81 | *.pdb 82 | *.ipdb 83 | *.pgc 84 | *.pgd 85 | *.rsp 86 | *.sbr 87 | *.tlb 88 | *.tli 89 | *.tlh 90 | *.tmp 91 | *.tmp_proj 92 | *_wpftmp.csproj 93 | *.log 94 | *.vspscc 95 | *.vssscc 96 | .builds 97 | *.pidb 98 | *.svclog 99 | *.scc 100 | 101 | # Chutzpah Test files 102 | _Chutzpah* 103 | 104 | # Visual C++ cache files 105 | ipch/ 106 | *.aps 107 | *.ncb 108 | *.opendb 109 | *.opensdf 110 | *.sdf 111 | *.cachefile 112 | *.VC.db 113 | *.VC.VC.opendb 114 | 115 | # Visual Studio profiler 116 | *.psess 117 | *.vsp 118 | *.vspx 119 | *.sap 120 | 121 | # Visual Studio Trace Files 122 | *.e2e 123 | 124 | # TFS 2012 Local Workspace 125 | $tf/ 126 | 127 | # Guidance Automation Toolkit 128 | *.gpState 129 | 130 | # ReSharper is a .NET coding add-in 131 | _ReSharper*/ 132 | *.[Rr]e[Ss]harper 133 | *.DotSettings.user 134 | 135 | # TeamCity is a build add-in 136 | _TeamCity* 137 | 138 | # DotCover is a Code Coverage Tool 139 | *.dotCover 140 | 141 | # AxoCover is a Code Coverage Tool 142 | .axoCover/* 143 | !.axoCover/settings.json 144 | 145 | # Coverlet is a free, cross platform Code Coverage Tool 146 | coverage*.json 147 | coverage*.xml 148 | coverage*.info 149 | 150 | # Visual Studio code coverage results 151 | *.coverage 152 | *.coveragexml 153 | 154 | # NCrunch 155 | _NCrunch_* 156 | .*crunch*.local.xml 157 | nCrunchTemp_* 158 | 159 | # MightyMoose 160 | *.mm.* 161 | AutoTest.Net/ 162 | 163 | # Web workbench (sass) 164 | .sass-cache/ 165 | 166 | # Installshield output folder 167 | [Ee]xpress/ 168 | 169 | # DocProject is a documentation generator add-in 170 | DocProject/buildhelp/ 171 | DocProject/Help/*.HxT 172 | DocProject/Help/*.HxC 173 | DocProject/Help/*.hhc 174 | DocProject/Help/*.hhk 175 | DocProject/Help/*.hhp 176 | DocProject/Help/Html2 177 | DocProject/Help/html 178 | 179 | # Click-Once directory 180 | publish/ 181 | 182 | # Publish Web Output 183 | *.[Pp]ublish.xml 184 | *.azurePubxml 185 | # Note: Comment the next line if you want to checkin your web deploy settings, 186 | # but database connection strings (with potential passwords) will be unencrypted 187 | *.pubxml 188 | *.publishproj 189 | 190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 191 | # checkin your Azure Web App publish settings, but sensitive information contained 192 | # in these scripts will be unencrypted 193 | PublishScripts/ 194 | 195 | # NuGet Packages 196 | *.nupkg 197 | # NuGet Symbol Packages 198 | *.snupkg 199 | # The packages folder can be ignored because of Package Restore 200 | **/[Pp]ackages/* 201 | # except build/, which is used as an MSBuild target. 202 | !**/[Pp]ackages/build/ 203 | # Uncomment if necessary however generally it will be regenerated when needed 204 | #!**/[Pp]ackages/repositories.config 205 | # NuGet v3's project.json files produces more ignorable files 206 | *.nuget.props 207 | *.nuget.targets 208 | 209 | # Microsoft Azure Build Output 210 | csx/ 211 | *.build.csdef 212 | 213 | # Microsoft Azure Emulator 214 | ecf/ 215 | rcf/ 216 | 217 | # Windows Store app package directories and files 218 | AppPackages/ 219 | BundleArtifacts/ 220 | Package.StoreAssociation.xml 221 | _pkginfo.txt 222 | *.appx 223 | *.appxbundle 224 | *.appxupload 225 | 226 | # Visual Studio cache files 227 | # files ending in .cache can be ignored 228 | *.[Cc]ache 229 | # but keep track of directories ending in .cache 230 | !?*.[Cc]ache/ 231 | 232 | # Others 233 | ClientBin/ 234 | ~$* 235 | *~ 236 | *.dbmdl 237 | *.dbproj.schemaview 238 | *.jfm 239 | *.pfx 240 | *.publishsettings 241 | orleans.codegen.cs 242 | 243 | # Including strong name files can present a security risk 244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 245 | #*.snk 246 | 247 | # Since there are multiple workflows, uncomment next line to ignore bower_components 248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 249 | #bower_components/ 250 | 251 | # RIA/Silverlight projects 252 | Generated_Code/ 253 | 254 | # Backup & report files from converting an old project file 255 | # to a newer Visual Studio version. Backup files are not needed, 256 | # because we have git ;-) 257 | _UpgradeReport_Files/ 258 | Backup*/ 259 | UpgradeLog*.XML 260 | UpgradeLog*.htm 261 | ServiceFabricBackup/ 262 | *.rptproj.bak 263 | 264 | # SQL Server files 265 | *.mdf 266 | *.ldf 267 | *.ndf 268 | 269 | # Business Intelligence projects 270 | *.rdl.data 271 | *.bim.layout 272 | *.bim_*.settings 273 | *.rptproj.rsuser 274 | *- [Bb]ackup.rdl 275 | *- [Bb]ackup ([0-9]).rdl 276 | *- [Bb]ackup ([0-9][0-9]).rdl 277 | 278 | # Microsoft Fakes 279 | FakesAssemblies/ 280 | 281 | # GhostDoc plugin setting file 282 | *.GhostDoc.xml 283 | 284 | # Node.js Tools for Visual Studio 285 | .ntvs_analysis.dat 286 | node_modules/ 287 | 288 | # Visual Studio 6 build log 289 | *.plg 290 | 291 | # Visual Studio 6 workspace options file 292 | *.opt 293 | 294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 295 | *.vbw 296 | 297 | # Visual Studio LightSwitch build output 298 | **/*.HTMLClient/GeneratedArtifacts 299 | **/*.DesktopClient/GeneratedArtifacts 300 | **/*.DesktopClient/ModelManifest.xml 301 | **/*.Server/GeneratedArtifacts 302 | **/*.Server/ModelManifest.xml 303 | _Pvt_Extensions 304 | 305 | # Paket dependency manager 306 | .paket/paket.exe 307 | paket-files/ 308 | 309 | # FAKE - F# Make 310 | .fake/ 311 | 312 | # CodeRush personal settings 313 | .cr/personal 314 | 315 | # Python Tools for Visual Studio (PTVS) 316 | __pycache__/ 317 | *.pyc 318 | 319 | # Cake - Uncomment if you are using it 320 | # tools/** 321 | # !tools/packages.config 322 | 323 | # Tabs Studio 324 | *.tss 325 | 326 | # Telerik's JustMock configuration file 327 | *.jmconfig 328 | 329 | # BizTalk build output 330 | *.btp.cs 331 | *.btm.cs 332 | *.odx.cs 333 | *.xsd.cs 334 | 335 | # OpenCover UI analysis results 336 | OpenCover/ 337 | 338 | # Azure Stream Analytics local run output 339 | ASALocalRun/ 340 | 341 | # MSBuild Binary and Structured Log 342 | *.binlog 343 | 344 | # NVidia Nsight GPU debugger configuration file 345 | *.nvuser 346 | 347 | # MFractors (Xamarin productivity tool) working folder 348 | .mfractor/ 349 | 350 | # Local History for Visual Studio 351 | .localhistory/ 352 | 353 | # BeatPulse healthcheck temp database 354 | healthchecksdb 355 | 356 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 357 | MigrationBackup/ 358 | 359 | # Ionide (cross platform F# VS Code tools) working folder 360 | .ionide/ 361 | 362 | # Fody - auto-generated XML schema 363 | FodyWeavers.xsd -------------------------------------------------------------------------------- /DownloaderExtension/DownloaderExtension.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net6.0-windows 5 | enable 6 | true 7 | True 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /DownloaderExtension/DownloaderExtension.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /DownloaderExtension/HttpClientSingleton.cs: -------------------------------------------------------------------------------- 1 | using DownloaderExtension; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Diagnostics; 5 | using System.IO; 6 | using System.Linq; 7 | using System.Net.Http; 8 | using System.Text; 9 | using System.Threading; 10 | using System.Threading.Tasks; 11 | 12 | namespace SimpleThingsProvider 13 | { 14 | public static class HttpClientSingleton 15 | { 16 | public static HttpClient client = new HttpClient(); 17 | static HttpClientSingleton() 18 | { 19 | client.Timeout = Timeout.InfiniteTimeSpan; 20 | } 21 | public static async Task DownloadAsync(this HttpClient client, string requestUri, Stream destination, IProgress progress = null, CancellationToken cancellationToken = default, IsPaused isPaused = null) 22 | { 23 | // Get the http headers first to examine the content length 24 | using (var response = await client.GetAsync(requestUri, HttpCompletionOption.ResponseHeadersRead)) 25 | { 26 | var contentLength = response.Content.Headers.ContentLength; 27 | 28 | using (var download = await response.Content.ReadAsStreamAsync()) 29 | { 30 | // Ignore progress reporting when no progress reporter was 31 | // passed or when the content length is unknown 32 | if (progress == null || !contentLength.HasValue) 33 | { 34 | await download.CopyToAsync(destination); 35 | return; 36 | } 37 | 38 | // Convert absolute progress (bytes downloaded) into relative progress (0% - 100%) 39 | var relativeProgress = new Progress(totalBytes => progress.Report((float)totalBytes / contentLength.Value)); 40 | // Use extension method to report progress while downloading 41 | await download.CopyToAsync(destination, 8192, relativeProgress, cancellationToken, isPaused); 42 | if (cancellationToken.IsCancellationRequested) 43 | { 44 | progress.Report(0); 45 | } 46 | else 47 | { 48 | progress.Report(100); 49 | } 50 | destination.Close(); 51 | } 52 | } 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /DownloaderExtension/Info.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version" : "1.0.0" 3 | } -------------------------------------------------------------------------------- /DownloaderExtension/StreamExtensions.cs: -------------------------------------------------------------------------------- 1 | using DownloaderExtension; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Diagnostics; 5 | using System.IO; 6 | using System.Linq; 7 | using System.Net.Sockets; 8 | using System.Text; 9 | using System.Threading; 10 | using System.Threading.Tasks; 11 | 12 | namespace SimpleThingsProvider 13 | { 14 | public static class StreamExtensions 15 | { 16 | public static async Task CopyToAsync(this Stream source, Stream destination, int bufferSize, IProgress progress, CancellationToken cancellationToken = default, IsPaused isPaused = null) 17 | { 18 | if (source == null) 19 | throw new ArgumentNullException(nameof(source)); 20 | if (!source.CanRead) 21 | throw new ArgumentException("Has to be readable", nameof(source)); 22 | if (destination == null) 23 | throw new ArgumentNullException(nameof(destination)); 24 | if (!destination.CanWrite) 25 | throw new ArgumentException("Has to be writable", nameof(destination)); 26 | if (bufferSize < 0) 27 | throw new ArgumentOutOfRangeException(nameof(bufferSize)); 28 | 29 | var buffer = new byte[bufferSize]; 30 | long totalBytesRead = 0; 31 | int bytesRead; 32 | try 33 | { 34 | while ((bytesRead = await source.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false)) != 0) 35 | { 36 | if (isPaused.pause) 37 | { 38 | Thread.Sleep(100); 39 | continue; 40 | } 41 | await destination.WriteAsync(buffer, 0, bytesRead, cancellationToken).ConfigureAwait(false); 42 | totalBytesRead += bytesRead; 43 | progress.Report(totalBytesRead * 100); 44 | } 45 | } 46 | catch (TaskCanceledException e) 47 | { 48 | if (destination is FileStream fileStream) 49 | { 50 | try 51 | { 52 | // Delete the file 53 | destination.Close(); 54 | Debug.WriteLine(fileStream.Name); 55 | File.Delete(fileStream.Name); 56 | return; 57 | } 58 | catch(Exception c) { Debug.WriteLine(c); } 59 | } 60 | return; 61 | } 62 | catch(OperationCanceledException e) 63 | { 64 | if (destination is FileStream fileStream) 65 | { 66 | try 67 | { 68 | // Delete the file 69 | destination.Close(); 70 | Debug.WriteLine(fileStream.Name); 71 | File.Delete(fileStream.Name); 72 | return; 73 | } 74 | catch (Exception c) { Debug.WriteLine(c); } 75 | } 76 | return; 77 | } 78 | 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /ElAmigosModule/ElAmigosModule.cs: -------------------------------------------------------------------------------- 1 | using HtmlAgilityPack; 2 | using System.Diagnostics; 3 | using System.Net; 4 | using System.Net.Http.Headers; 5 | using System.Windows; 6 | using System.Windows.Controls; 7 | using System.Windows.Data; 8 | 9 | namespace SimpleThingsProvider 10 | { 11 | public class ElAmigosModule : IModule 12 | { 13 | public string Name { get { return "ElAmigos"; } set { } } 14 | public string ModuleVersion { get { return "1.0.0"; } set { } } 15 | public HtmlDocument Doc { get; set; } 16 | private List _underlying; 17 | public bool needsSubSelector { get { return false; } } 18 | public LinksWindow linksWindow { get { return new LinksWindow(); } } 19 | public ElAmigosModule() 20 | { 21 | 22 | } 23 | 24 | public void buildListView(GridView grid) 25 | { 26 | GridViewColumn title = new GridViewColumn(); 27 | title.Header = "Title"; 28 | title.DisplayMemberBinding = new Binding("Title"); 29 | GridViewColumn info = new GridViewColumn(); 30 | info.Header = "Infos"; 31 | info.DisplayMemberBinding = new Binding("Infos"); 32 | grid.Columns.Add(title); 33 | grid.Columns.Add(info); 34 | } 35 | 36 | public string getLink(int index) 37 | { 38 | return getLink(_underlying[index]); 39 | } 40 | 41 | public string getLink(string gameURL) 42 | { 43 | LinksWindow linksWindow = new LinksWindow(); 44 | linksWindow.Show(); 45 | linksWindow.getLinksList().Visibility = Visibility.Visible; 46 | List websites = new List(); 47 | HtmlWeb web = new HtmlWeb(); 48 | HtmlDocument doc = web.Load(gameURL); 49 | HtmlNodeCollection downloads = doc.DocumentNode.SelectNodes("/html/body/div/div[6]/div/a"); 50 | Result result = new Result(); 51 | foreach (HtmlNode node in downloads) 52 | { 53 | result = new Result(); 54 | result.Name = node.InnerText; 55 | result.Link = node.Attributes["href"].Value; 56 | result.Infos = "Base game"; 57 | websites.Add(result); 58 | } 59 | 60 | string info = doc.DocumentNode.SelectSingleNode("/html/body/div/div[8]/p/text()").InnerText; 61 | downloads = doc.DocumentNode.SelectNodes("/html/body/div/div[8]/p/a"); 62 | foreach (HtmlNode node in downloads) 63 | { 64 | result = new Result(); 65 | result.Name = node.InnerText; 66 | result.Link = node.Attributes["href"].Value; 67 | result.Infos = info; 68 | websites.Add(result); 69 | } 70 | linksWindow.getLinksList().ItemsSource = websites; 71 | return ""; 72 | } 73 | 74 | public Tuple, List> getResults(HtmlDocument document) 75 | { 76 | _underlying = new List(); 77 | List results = new(); 78 | 79 | HtmlNodeCollection res = document.DocumentNode.SelectNodes("/html/body/div/div[4]/div/div/div"); 80 | foreach (HtmlNode node in res) 81 | { 82 | HtmlNode n = node.SelectSingleNode("h6/a"); 83 | Result result = new Result(); 84 | string title = n.InnerText; 85 | title = title.Replace("'", "'"); 86 | title = title.Replace("’", "’"); 87 | title = title.Replace("–", "-"); 88 | title = title.Replace("&", "&"); 89 | result.Title = title; 90 | 91 | result.Link = n.Attributes["href"].Value; 92 | n = node.SelectSingleNode("small"); 93 | result.Infos = n.InnerText; 94 | if (!result.Infos.Contains("[Offer]")) 95 | { 96 | results.Add(result); 97 | _underlying.Add(result.Link); 98 | } 99 | } 100 | return Tuple.Create(results, _underlying); 101 | } 102 | 103 | public HttpStatusCode search(string toSearch) 104 | { 105 | HttpStatusCode code; 106 | HtmlWeb web = new(); 107 | web.UserAgent = "SimpleThingsProvider"; 108 | 109 | Logger.Log("Searching for: " + toSearch + " in: " + Name, "Website (Search)"); 110 | try 111 | { 112 | if (Settings.Default.ProxyEnabled) Doc = web.Load("https://www.elamigos-games.com/?q=" + toSearch.Replace(" ", "+"), Settings.Default.ProxyIP, Int32.Parse(Settings.Default.ProxyPort), string.Empty, string.Empty); 113 | else Doc = web.Load("https://www.elamigos-games.com/?q=" + toSearch.Replace(" ", "+")); 114 | } 115 | catch 116 | { 117 | return HttpStatusCode.NotFound; 118 | } 119 | 120 | code = web.StatusCode; 121 | return code; 122 | } 123 | 124 | public async void checkUpdate() 125 | { 126 | string repoURL = "https://raw.githubusercontent.com/Backend2121/SimpleThingsProvider/master/ElAmigosModule/Info.json"; 127 | HttpClient client = new HttpClient(); 128 | HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, repoURL); 129 | requestMessage.Headers.UserAgent.Add(new ProductInfoHeaderValue("User-Agent", "SimpleThingsProvider")); 130 | HttpResponseMessage response = await client.SendAsync(requestMessage); 131 | string content = await response.Content.ReadAsStringAsync(); 132 | int start = content.IndexOf(": \""); 133 | int end = content.IndexOf('"', start + 3); 134 | string version = content.Substring(start + 3, end - start - 3); 135 | if (!version.Equals(ModuleVersion)) 136 | { 137 | MessageBoxResult r = AlertClass.Alert("An update for " + Name + " is available, open the GitHub page?", Name, MessageBoxButton.YesNo, MessageBoxImage.Information); 138 | if (r == MessageBoxResult.Yes) 139 | { 140 | var process = new System.Diagnostics.ProcessStartInfo() { UseShellExecute = true, FileName = "https://github.com/Backend2121/SimpleThingsProvider/releases/latest" }; 141 | System.Diagnostics.Process.Start(process); 142 | Logger.Log($"Newer version for {Name}: {version} found!", Name + " Updater"); 143 | } 144 | } 145 | } 146 | } 147 | } -------------------------------------------------------------------------------- /ElAmigosModule/ElAmigosModule.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net6.0-windows 5 | enable 6 | enable 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /ElAmigosModule/Info.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version" : "1.0.0" 3 | } -------------------------------------------------------------------------------- /FitGirlModule/FitGirlModule/FitGirlModule.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net6.0-windows 5 | enable 6 | true 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /FitGirlModule/FitGirlModule/Info.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version" : "1.0.0" 3 | } -------------------------------------------------------------------------------- /HexRomsModule/HexRomsModule.cs: -------------------------------------------------------------------------------- 1 | using HtmlAgilityPack; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Diagnostics; 5 | using System.Net; 6 | using System.Net.Http.Headers; 7 | using System.Net.Http; 8 | using System.Windows; 9 | using System.Windows.Controls; 10 | using System.Windows.Data; 11 | 12 | namespace SimpleThingsProvider 13 | { 14 | internal class HexRomsModule : IModule 15 | { 16 | public string Name { get { return "HexRom"; } set { } } 17 | public string ModuleVersion { get { return "1.0.0"; } set { } } 18 | public HtmlDocument Doc { get; set; } 19 | private List _underlying; 20 | public bool needsSubSelector { get { return false; } } 21 | public LinksWindow linksWindow { get { return new LinksWindow(); } } 22 | public HexRomsModule() 23 | { 24 | 25 | } 26 | public void buildListView(GridView grid) 27 | { 28 | GridViewColumn title = new GridViewColumn(); 29 | title.Header = "Title"; 30 | title.DisplayMemberBinding = new Binding("Title"); 31 | grid.Columns.Add(title); 32 | } 33 | 34 | public Tuple, List> getResults(HtmlDocument document) 35 | { 36 | _underlying = new List(); 37 | List results = new(); 38 | HtmlNodeCollection alist = document.DocumentNode.SelectNodes("/html/body/div[2]/div[1]/div/div[1]/div/div/ul/li/a"); 39 | try 40 | { 41 | Logger.Log($"Found {alist.Count} results", "Websites (getResults - HexRom)"); 42 | foreach (HtmlNode game in alist) 43 | { 44 | try 45 | { 46 | var title = game.Attributes["title"].Value; 47 | title = title.Replace("&", "&"); 48 | results.Add(new Result() { Title = title }); 49 | _underlying.Add(game.Attributes["href"].Value); 50 | } 51 | catch { continue; } 52 | } 53 | } 54 | catch (NullReferenceException) 55 | { 56 | Logger.Log("No results found!", "Websites (getResults - HexRom)"); 57 | return Tuple.Create(new List(), new List()); 58 | } 59 | 60 | Logger.Log($"Found {_underlying.Count} entries", "Websites (getResults - HexRoms)"); 61 | if (!Settings.Default.NSFWContent) 62 | { 63 | foreach (Result res in results) 64 | { 65 | foreach (string s in BannedWords.nsfwWords) 66 | { 67 | if (res.Title.ToLower().Contains(s.ToLower())) 68 | { 69 | res.Title = "NSFW Content"; 70 | _underlying[results.IndexOf(res)] = string.Empty; 71 | } 72 | } 73 | } 74 | } 75 | return Tuple.Create(results, _underlying); 76 | } 77 | public string getLink(int index) 78 | { 79 | return getLink(_underlying[index] + "/download/"); 80 | } 81 | 82 | public string getLink(string gameURL) 83 | { 84 | HtmlWeb web = new HtmlWeb(); 85 | HtmlDocument doc = web.Load(gameURL); 86 | LinksWindow linksWindow = new LinksWindow(); 87 | linksWindow.getLinksList().Visibility = Visibility.Visible; 88 | linksWindow.Show(); 89 | List websites = new List(); 90 | var title = ""; 91 | var link = ""; 92 | HtmlNodeCollection links = doc.DocumentNode.SelectNodes("/html/body/div[2]/div[1]/div/div/div/div[2]/div/table/tbody/tr/td/a"); 93 | System.Diagnostics.Debug.Write(links.Count); 94 | if (links == null) { return ""; } 95 | Logger.Log("Getting game page links", "Websites (getGamePage - HexRom)"); 96 | foreach (HtmlNode downloadlink in links) 97 | { 98 | title = downloadlink.InnerText; 99 | link = downloadlink.Attributes["href"].Value; 100 | if (title != " ") { websites.Add(new Result() { Link = link, Infos = title }); } 101 | } 102 | Logger.Log($"Found {websites.Count} game page links", "Websites (getGamePage - HexRom)"); 103 | if (!Settings.Default.NSFWContent) 104 | { 105 | foreach (Result res in websites) 106 | { 107 | foreach (string s in BannedWords.nsfwWords) 108 | { 109 | if (res.Infos.ToLower().Contains(s.ToLower())) 110 | { 111 | res.Infos = "NSFW Content"; 112 | _underlying[websites.IndexOf(res)] = string.Empty; 113 | } 114 | } 115 | } 116 | } 117 | linksWindow.getLinksList().ItemsSource = websites; 118 | return ""; 119 | } 120 | 121 | public HttpStatusCode search(string toSearch) 122 | { 123 | HttpStatusCode code; 124 | HtmlWeb web = new(); 125 | web.UserAgent = "SimpleThingsProvider"; 126 | 127 | Logger.Log("Searching for: " + toSearch + " in: " + Name, "Website (Search)"); 128 | try 129 | { 130 | if (Settings.Default.ProxyEnabled) Doc = web.Load("https://hexrom.com/roms/nintendo-3ds/?title=" + toSearch, Settings.Default.ProxyIP, Int32.Parse(Settings.Default.ProxyPort), string.Empty, string.Empty); 131 | else Doc = web.Load("https://hexrom.com/roms/nintendo-3ds/?title=" + toSearch); 132 | } 133 | catch { Logger.Log($"Error code {HttpStatusCode.NotFound}", "Website (Search)"); return HttpStatusCode.NotFound; } 134 | 135 | code = web.StatusCode; 136 | return code; 137 | } 138 | public async void checkUpdate() 139 | { 140 | string repoURL = "https://raw.githubusercontent.com/Backend2121/SimpleThingsProvider/master/HexRomsModule/Info.json"; 141 | HttpClient client = new HttpClient(); 142 | HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, repoURL); 143 | requestMessage.Headers.UserAgent.Add(new ProductInfoHeaderValue("User-Agent", "SimpleThingsProvider")); 144 | HttpResponseMessage response = await client.SendAsync(requestMessage); 145 | string content = await response.Content.ReadAsStringAsync(); 146 | int start = content.IndexOf(": \""); 147 | int end = content.IndexOf('"', start + 3); 148 | string version = content.Substring(start + 3, end - start - 3); 149 | if (!version.Equals(ModuleVersion)) 150 | { 151 | MessageBoxResult r = AlertClass.Alert("An update for " + Name + " is available, open the GitHub page?", Name, MessageBoxButton.YesNo, MessageBoxImage.Information); 152 | if (r == MessageBoxResult.Yes) 153 | { 154 | var process = new System.Diagnostics.ProcessStartInfo() { UseShellExecute = true, FileName = "https://github.com/Backend2121/SimpleThingsProvider/releases/latest" }; 155 | System.Diagnostics.Process.Start(process); 156 | Logger.Log($"Newer version for {Name}: {version} found!", Name + " Updater"); 157 | } 158 | } 159 | } 160 | } 161 | } 162 | -------------------------------------------------------------------------------- /HexRomsModule/HexRomsModule.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net6.0-windows 5 | enable 6 | true 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /HexRomsModule/Info.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version" : "1.0.0" 3 | } -------------------------------------------------------------------------------- /IModule/IModule.cs: -------------------------------------------------------------------------------- 1 | using HtmlAgilityPack; 2 | using SimpleThingsProvider; 3 | using System.Collections.Generic; 4 | using System.Net; 5 | using System.Windows.Controls; 6 | 7 | public interface IModule 8 | { 9 | string Name { get; set; } 10 | public HtmlDocument Doc { get; set; } 11 | public ListView listview { get; set; } 12 | public bool needsSubSelector { get; } 13 | public LinksWindow linksWindow { get; } 14 | public List getResults(HtmlDocument document); 15 | public string getLink(int index); 16 | public string getLink(string gameURL); 17 | public HttpStatusCode search(string toSearch); 18 | } -------------------------------------------------------------------------------- /IModule/IModule.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net6.0-windows 5 | enable 6 | true 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [Simple Things Provider (STP)](https://github.com/Backend2121/SimpleThingsProvider/releases/latest) 2 | ## Only for Windows 7/10/11 3 | Successor of SGD improved to provide easier access to lots of data (games, films, books, torrents, etc) 4 | 5 | # DISCLAIMER 6 | THIS SOFTWARE MUST BE USED TO DOWNLOAD ONLY LEGALLY OWNED MEDIA! I DECLINE ANY RESPONSIBILITIES OF YOUR ACTIONS! 7 | 8 | ![alt text](https://github.com/Backend2121/SimpleThingsProvider/blob/master/TorrentScraper/preview.png?raw=true) 9 | 10 | 11 | # FEATURES 12 | * User-friendly GUI 13 | * Game search functionality 14 | * Extendable features through Extensions 15 | * Extendable sources through Modules 16 | * Multiple Sources 17 | * Configurable Proxy 18 | * Update notifier 19 | * Easy to install 20 | * Light & Dark mode 21 | 22 | # SOURCES 23 | **x1337** for Torrents (Broken right now) 24 | 25 | **ThePirateBay** for Torrents 26 | 27 | **FitGirl** for PC Repacks 28 | 29 | **ElAmigos** for PC Games 30 | 31 | **RPGOnly** for Switch Games 32 | 33 | **NxBrew** for Switch Games 34 | 35 | **Ziperto** for Switch Games 36 | 37 | **HexRoms** for 3ds Games 38 | 39 | **WoWRoms** for old Games 40 | 41 | **Vimm's Lair** for old Games 42 | 43 | # HOW TO INSTALL 44 | Download "STP_Setup.msi", run it (smartscreen will probably block it), finish the installation by leaving everything as is and start downloading the Modules/Extensions you are interested in from the same page where you downloaded the Setup, extract the "STP" folder from the ".zip" file(s) inside your Documents folder and run STP! 45 | 46 | As an example for the path: 47 | C:\Users\{USER}\Documents\STP\Modules\SomethingModule.dll 48 | C:\Users\{USER}\Documents\STP\Extensions\SomethingExtension.dll 49 | 50 | # HOW TO USE 51 | Just type whatever you want to search from the selected website (in the drop-down menu) and press search! 52 | 53 | # Do i need a VPN? 54 | 55 | Whether or not you need a VPN will differ based on what you're downloading, what tracker you're using and what country you live in. 56 | 57 | A major AAA game is much more likely to be tracked than a shovelware title that costs $3 on the eShop. 58 | 59 | Not every country has ISPs and laws that care about torrenting. When in doubt, assume your country has harsher laws to be safe. 60 | 61 | Finally, the site matters. The chances of receiving an ISP letter while using a private tracker is much smaller than using a public tracker due to it being more work for copyright trolls to join private sites (and they have a smaller userbase than public ones). The effort isn't worth it for them when they can get more people more easily on other sites. 62 | 63 | # DISCORD 64 | For any help with the software join the Discord and ask for help! 65 | 66 | [Discord Link!](https://discord.com/invite/vBkxx7rR) 67 | 68 | # [TUTORIAL](https://youtu.be/49bENmhpf_s) 69 | -------------------------------------------------------------------------------- /RPGOnlyModule/Info.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version" : "1.0.0" 3 | } -------------------------------------------------------------------------------- /RPGOnlyModule/RPGOnlyModule.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net6.0-windows 5 | enable 6 | true 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /STP_Setup/Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Backend2121/SimpleThingsProvider/1c4342714ff0729cb929beb13f1e1378b2680e1a/STP_Setup/Icon.ico -------------------------------------------------------------------------------- /STP_Setup/Product.wxs: -------------------------------------------------------------------------------- 1 | 2 |  3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /STP_Setup/STP_Setup.wax: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | TorrentScraper\SimpleThingsProvider.csproj 5 | 6 | 7 | 8 | 9 | 10 | false 11 | true 12 | false 13 | - 14 | -------------------------------------------------------------------------------- /STP_Setup/STP_Setup.wixproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | Debug 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | SimpleThingsProvider 16 | {81409bd9-3d58-4bee-b5d4-906f232c2581} 17 | True 18 | True 19 | Binaries;Content;Satellites 20 | INSTALLFOLDER 21 | 22 | 23 | -------------------------------------------------------------------------------- /TPBModule/Info.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version" : "1.0.0" 3 | } -------------------------------------------------------------------------------- /TPBModule/TPBModule.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net6.0-windows 5 | enable 6 | true 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /TorrentScraper/AboutWindow.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 60 | 61 | -------------------------------------------------------------------------------- /TorrentScraper/AboutWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using ControlzEx.Theming; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | using System.Windows.Controls; 9 | using System.Windows.Data; 10 | using System.Windows.Documents; 11 | using System.Windows.Input; 12 | using System.Windows.Media; 13 | using System.Windows.Media.Imaging; 14 | using System.Windows.Shapes; 15 | 16 | namespace SimpleThingsProvider 17 | { 18 | /// 19 | /// Logica di interazione per AboutWindow.xaml 20 | /// 21 | public partial class AboutWindow 22 | { 23 | private byte[] egg = { 54, 56, 55, 52, 55, 52, 55, 48, 55, 51, 51, 97, 50, 102, 50, 102, 55, 57, 54, 102, 55, 53, 55, 52, 55, 53, 50, 101, 54, 50, 54, 53, 50, 102, 54, 102, 54, 53, 51, 49, 52, 97, 52, 102, 55, 97, 53, 51, 52, 99, 55, 53, 52, 97, 54, 51 }; 24 | public AboutWindow() 25 | { 26 | InitializeComponent(); 27 | if (Settings.Default.SyncWithWindows) { ThemeManager.Current.ThemeSyncMode = ThemeSyncMode.SyncWithAppMode; } 28 | else { ThemeManager.Current.ChangeTheme(this, Settings.Default.MainTheme + "." + Settings.Default.SubTheme); } 29 | 30 | ThemeManager.Current.SyncTheme(); 31 | VersionLabel.Content = Settings.Default.ApplicationVersion; 32 | Logger.Log("About Window initialized", "About"); 33 | this.SizeToContent = SizeToContent.WidthAndHeight; 34 | } 35 | public static string _2121(String h, Encoding e) 36 | { 37 | System.Diagnostics.Debug.WriteLine(h); 38 | int n = h.Length; 39 | byte[] b = new byte[n / 2]; 40 | for (int i = 0; i < n; i += 2) 41 | { 42 | b[i / 2] = Convert.ToByte(h.Substring(i, 2), 16); 43 | } 44 | return e.GetString(b); 45 | } 46 | private void openDiscord(object sender, RoutedEventArgs e) 47 | { 48 | Logger.Log("Opening Discord Invite", "About"); 49 | var process = new System.Diagnostics.ProcessStartInfo() { UseShellExecute = true, FileName = "https://discord.com/invite/WTrCtvyPke" }; 50 | System.Diagnostics.Process.Start(process); 51 | Logger.Log("Opened Discord Invite", "About"); 52 | } 53 | private void openPatreon(object sender, RoutedEventArgs e) 54 | { 55 | Logger.Log("Opening Patreon Page", "About"); 56 | var process = new System.Diagnostics.ProcessStartInfo() { UseShellExecute = true, FileName = "https://www.patreon.com/Backend2121" }; 57 | System.Diagnostics.Process.Start(process); 58 | Logger.Log("Opened Patreon Page", "About"); 59 | } 60 | private void openReddit(object sender, RoutedEventArgs e) 61 | { 62 | Logger.Log("Opening Reddit Profile", "About"); 63 | var process = new System.Diagnostics.ProcessStartInfo() { UseShellExecute = true, FileName = "https://www.reddit.com/user/Sbigioduro" }; 64 | System.Diagnostics.Process.Start(process); 65 | Logger.Log("Opened Reddit Profile", "About"); 66 | } 67 | private void openYoutube(object sender, RoutedEventArgs e) 68 | { 69 | Logger.Log("Opening Youtube Channel", "About"); 70 | var process = new System.Diagnostics.ProcessStartInfo() { UseShellExecute = true, FileName = "https://www.youtube.com/channel/UCW2JQJs_R3O_I937yxicT9A" }; 71 | System.Diagnostics.Process.Start(process); 72 | Logger.Log("Opened Youtube Channel", "About"); 73 | } 74 | private void openEE(object sender, RoutedEventArgs e) 75 | { 76 | // That random textbox is not useless! 77 | Logger.Log("Testing the Super Secret Code Box", "About"); 78 | if (SuperSecretCodeTextBox.Text == "HelloThereGeneralKenobi") 79 | { 80 | Logger.Log("* got in!", "About"); 81 | var process = new System.Diagnostics.ProcessStartInfo() { UseShellExecute = true, FileName = _2121(Encoding.ASCII.GetString(egg), Encoding.ASCII) }; 82 | System.Diagnostics.Process.Start(process); 83 | } 84 | } 85 | } 86 | } -------------------------------------------------------------------------------- /TorrentScraper/AlertClass.cs: -------------------------------------------------------------------------------- 1 | using ControlzEx.Theming; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Reflection.Metadata; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | using System.Windows; 9 | using System.Windows.Controls; 10 | using System.Windows.Media; 11 | using System.Windows.Media.Media3D; 12 | 13 | namespace SimpleThingsProvider 14 | { 15 | public static class AlertClass 16 | { 17 | public static MessageBoxResult Alert(string messageBoxText, string caption, MessageBoxButton button , MessageBoxImage messageBoxImage) 18 | { 19 | Logger.Log("Alert sent: " + caption + "\nWith message: " + messageBoxText, "Alert"); 20 | return MessageBox.Show(messageBoxText, caption, button, messageBoxImage, MessageBoxResult.OK); 21 | } 22 | 23 | public class CustomMessageBox : Window 24 | { 25 | public CustomMessageBox(string title, string message) 26 | { 27 | Title = title; 28 | Width = 300; 29 | Height = 150; 30 | WindowStartupLocation = WindowStartupLocation.CenterScreen; 31 | WindowStyle = WindowStyle.ToolWindow; 32 | ResizeMode = ResizeMode.NoResize; 33 | SolidColorBrush color; 34 | if (Settings.Default.SyncWithWindows) 35 | { 36 | if (SimpleThingsProvider.Utils.IsLightTheme()) 37 | { 38 | color = new SolidColorBrush(Colors.Black); 39 | } 40 | else 41 | { 42 | color = new SolidColorBrush(Colors.White); 43 | } 44 | } 45 | else if (Settings.Default.MainTheme == "Light") 46 | { 47 | color = new SolidColorBrush(Colors.Black); 48 | } 49 | else 50 | { 51 | color = new SolidColorBrush(Colors.White); 52 | } 53 | 54 | var textBlock = new TextBlock 55 | { 56 | Text = message, 57 | Margin = new Thickness(20), 58 | TextWrapping = TextWrapping.Wrap, 59 | Foreground = color, 60 | }; 61 | Content = textBlock; 62 | } 63 | } 64 | } 65 | } -------------------------------------------------------------------------------- /TorrentScraper/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 127.0.0.1 15 | 16 | 17 | 80 18 | 19 | 20 | False 21 | 22 | 23 | -1 24 | 25 | 26 | -1 27 | 28 | 29 | Light 30 | 31 | 32 | Blue 33 | 34 | 35 | False 36 | 37 | 39 | False 40 | 41 | 42 | False 43 | 44 | 45 | 46 | 47 | 48 | 49 | 2.0.3.0 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /TorrentScraper/App.xaml: -------------------------------------------------------------------------------- 1 |  6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /TorrentScraper/BannedWords.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Text.Json; 7 | using System.IO; 8 | 9 | namespace SimpleThingsProvider 10 | { 11 | public static class BannedWords 12 | { 13 | public static List nsfwWords = JsonSerializer.Deserialize>(File.ReadAllText("NSFWWords.json")); 14 | } 15 | } -------------------------------------------------------------------------------- /TorrentScraper/FilePathUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Text.RegularExpressions; 7 | using System.Threading.Tasks; 8 | 9 | namespace SimpleThingsProvider 10 | { 11 | public static class FilePathUtils 12 | { 13 | public static string GetValidFilePath(string inputString) 14 | { 15 | // Rimuovi i caratteri non validi per i nomi dei file su Windows 16 | string cleanString = RemoveInvalidPathChars(inputString); 17 | 18 | // Sostituisci spazi con trattini bassi 19 | cleanString = cleanString.Replace(' ', '_'); 20 | 21 | // Riduci la lunghezza massima del percorso (ad esempio, 260 caratteri per Windows) 22 | int maxPathLength = 260; 23 | if (cleanString.Length > maxPathLength) 24 | { 25 | cleanString = cleanString.Substring(0, maxPathLength); 26 | } 27 | 28 | return cleanString; 29 | } 30 | 31 | private static string RemoveInvalidPathChars(string input) 32 | { 33 | string invalidChars = Regex.Escape(new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars())); 34 | string invalidCharsPattern = string.Format(@"([{0}]*\.+$)|([{0}]+)", invalidChars); 35 | return Regex.Replace(input, invalidCharsPattern, "_"); 36 | } 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /TorrentScraper/HelpWindow.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 19 | 20 | -------------------------------------------------------------------------------- /TorrentScraper/HelpWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using ControlzEx.Theming; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | using System.Windows.Controls; 9 | using System.Windows.Data; 10 | using System.Windows.Documents; 11 | using System.Windows.Input; 12 | using System.Windows.Media; 13 | using System.Windows.Media.Imaging; 14 | using System.Windows.Shapes; 15 | 16 | namespace SimpleThingsProvider 17 | { 18 | /// 19 | /// Logica di interazione per HelpWindow.xaml 20 | /// 21 | public partial class HelpWindow : Window 22 | { 23 | public HelpWindow() 24 | { 25 | InitializeComponent(); 26 | if (Settings.Default.SyncWithWindows) { ThemeManager.Current.ThemeSyncMode = ThemeSyncMode.SyncWithAppMode; } 27 | else { ThemeManager.Current.ChangeTheme(this, Settings.Default.MainTheme + "." + Settings.Default.SubTheme); } 28 | 29 | ThemeManager.Current.SyncTheme(); 30 | Topmost = true; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /TorrentScraper/IExtension.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | 9 | public interface IExtension 10 | { 11 | string Name { get; set; } 12 | string ExtensionVersion { get; set; } 13 | public Window extensionWindow { get; set; } 14 | public Window getExtensionWindow(); 15 | public bool startFunction(object[] args); 16 | public List getElements(ListView lv, Label ol); 17 | public List getSettings(); 18 | public void showWindow(); 19 | public void enableButton(Label outputLabel); 20 | public void disableButton(Label outputLabel); 21 | public void saveSettings(); 22 | public void checkUpdate(); 23 | } -------------------------------------------------------------------------------- /TorrentScraper/IModule.cs: -------------------------------------------------------------------------------- 1 | using HtmlAgilityPack; 2 | using SimpleThingsProvider; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.ComponentModel; 6 | using System.Net; 7 | using System.Windows.Controls; 8 | 9 | public interface IModule 10 | { 11 | string Name { get; set; } 12 | string ModuleVersion { get; set; } 13 | public HtmlDocument Doc { get; set; } 14 | public bool needsSubSelector { get; } 15 | public LinksWindow linksWindow { get; } 16 | public Tuple, List> getResults(HtmlDocument document); 17 | public string getLink(int index); 18 | public string getLink(string gameURL); 19 | public HttpStatusCode search(string toSearch); 20 | public void buildListView(GridView view); 21 | public void checkUpdate(); 22 | } -------------------------------------------------------------------------------- /TorrentScraper/JsonSettings.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.VisualBasic.FileIO; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Diagnostics; 5 | using System.IO; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Text.Json; 9 | using System.Threading.Tasks; 10 | 11 | namespace SimpleThingsProvider 12 | { 13 | public class JsonSettings 14 | { 15 | private string directory; 16 | private string file; 17 | private Dictionary settings; 18 | public JsonSettings(string where, string fileName, Dictionary pairs) 19 | { 20 | directory = SpecialDirectories.MyDocuments + "\\STP\\" + where; 21 | file = fileName.Replace(".json", string.Empty); 22 | file += ".json"; 23 | settings = pairs; 24 | } 25 | public void saveToJson() 26 | { 27 | Debug.WriteLine(JsonSerializer.Serialize(settings)); 28 | File.WriteAllText(directory + "\\" + file, JsonSerializer.Serialize(settings)); 29 | } 30 | public Dictionary loadFromJson() 31 | { 32 | try 33 | { 34 | return JsonSerializer.Deserialize>(File.ReadAllText(directory + "\\" + file)); 35 | } 36 | catch (DirectoryNotFoundException e) 37 | { 38 | Directory.CreateDirectory(directory); 39 | File.Create(directory + "\\" + file).Close(); 40 | return new Dictionary(); 41 | } 42 | catch(FileNotFoundException e) 43 | { 44 | Directory.CreateDirectory(directory); 45 | File.Create(directory + "\\" + file).Close(); 46 | return new Dictionary(); 47 | } 48 | catch(JsonException e) 49 | { 50 | return new Dictionary(); 51 | } 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /TorrentScraper/LinksWindow.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /TorrentScraper/LinksWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using ControlzEx.Theming; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Windows; 5 | using System.Windows.Controls; 6 | 7 | namespace SimpleThingsProvider 8 | { 9 | /// 10 | /// Logica di interazione per LinksWindow.xaml 11 | /// 12 | public partial class LinksWindow : Window 13 | { 14 | public LinksWindow() 15 | { 16 | InitializeComponent(); 17 | if (Settings.Default.SyncWithWindows) { ThemeManager.Current.ThemeSyncMode = ThemeSyncMode.SyncWithAppMode; } 18 | else { ThemeManager.Current.ChangeTheme(this, Settings.Default.MainTheme + "." + Settings.Default.SubTheme); } 19 | ThemeManager.Current.SyncTheme(); 20 | // Hide all linkslists 21 | LinksList.Visibility = Visibility.Visible; 22 | Topmost = true; 23 | } 24 | private void SelectionChanged(object sender, RoutedEventArgs e) 25 | { 26 | string link = ""; 27 | MainWindow mainWindow = (MainWindow)Application.Current.MainWindow; 28 | if (LinksList.Visibility == Visibility.Visible) 29 | { 30 | link = ((Result)LinksList.SelectedValue).Link; 31 | } 32 | mainWindow.OutputLabel.Content = link; 33 | foreach (IExtension ex in mainWindow.getExtensions()) 34 | { 35 | ex.enableButton(mainWindow.OutputLabel); 36 | } 37 | if (link != "") { Close(); } 38 | } 39 | public ListView getLinksList() 40 | { 41 | return LinksList; 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /TorrentScraper/Logger.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace SimpleThingsProvider 9 | { 10 | public class Logger 11 | { 12 | static string file = $"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}/SimpleThingsProvider_logs/{createLogFile()}"; 13 | public static void Log(string logMessage, string whoami) 14 | { 15 | using (StreamWriter w = File.AppendText(file)) 16 | { 17 | w.Write("\r\nLog Entry : "); 18 | w.WriteLine($"{DateTime.Now.ToLongTimeString()} {DateTime.Now.ToLongDateString()}"); 19 | w.WriteLine($" :{whoami}"); 20 | w.WriteLine($" :{logMessage}"); 21 | w.WriteLine("-------------------------------"); 22 | } 23 | } 24 | private static string createLogFile() 25 | { 26 | var file = $"{DateTime.Now.ToLongTimeString()} {DateTime.Now.ToLongDateString()}".Replace(":", "_") + ".log"; 27 | file = file.Replace(" ", "_"); 28 | System.Diagnostics.Debug.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)); 29 | if (!Directory.Exists(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "/SimpleThingsProvider_logs/")) 30 | { 31 | Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "/SimpleThingsProvider_logs/"); 32 | } 33 | 34 | return file; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /TorrentScraper/NSFWWords.json: -------------------------------------------------------------------------------- 1 | [ "allupato", "sesso", "ammucchiata", "anale", "arrapato", "arrusa", "arruso", "assatanato", "bagascia", "bagassa", "bagnarsi", "baldracca", "balle", "battere", "battona", "belino", "biga", "bocchinara", "bocchino", "bofilo", "boiata", "bordello", "brinca", "bucaiolo", "budiùlo", "busone", "cacca", "caciocappella", "cadavere", "cagare", "cagata", "cagna", "casci", "cazzata", "cazzimma", "cazzo", "cesso", "cazzone", "checca", "chiappa", "chiavare", "chiavata", "ciospo", "ciucciami il cazzo", "coglione", "coglioni", "cornuto", "cozza", "culattina", "culattone", "culo", "ditalino", "fava", "femminuccia", "fica", "figa", "figlio di buona donna", "figlio di puttana", "figone", "finocchio", "fottere", "fottersi", "fracicone", "fregna", "frocio", "froscio", "goldone", "guardone", "imbecille", "incazzarsi", "incoglionirsi", "ingoio", "leccaculo", "lecchino", "lofare", "loffa", "loffare", "mannaggia", "merda", "merdata", "merdoso", "mignotta", "minchia", "minchione", "mona", "monta", "montare", "mussa", "nave scuola", "nerchia", "padulo", "palle", "palloso", "patacca", "patonza", "pecorina", "pesce", "picio", "pincare", "pippa", "pinnolone", "pipì", "pippone", "pirla", "pisciare", "piscio", "pisello", "pistolotto", "pomiciare", "pompa", "pompino", "porca", "porca madonna", "porca miseria", "porca puttana", "porco", "porco due", "porco zio", "potta", "puppami", "puttana", "quaglia", "recchione", "regina", "rincoglionire", "rizzarsi", "rompiballe", "rompipalle", "ruffiano", "sbattere", "sbattersi", "sborra", "sborrata", "sborrone", "sbrodolata", "scopare", "scopata", "scorreggiare", "sega", "slinguare", "slinguata", "smandrappata", "soccia", "socmel", "sorca", "spagnola", "spompinare", "sticchio", "stronza", "stronzata", "stronzo", "succhiami", "succhione", "sveltina", "sverginare", "tarzanello", "terrone", "testa di cazzo", "tette", "tirare", "topa", "troia", "trombare", "vacca", "vaffanculo", "vangare", "zinne", "zio cantante", "zoccola", "2g1c", "2 girls 1 cup", "acrotomophilia", "alabama hot pocket", "alaskan pipeline", "anal", "anilingus", "anus", "apeshit", "arsehole", "ass", "asshole", "assmunch", "auto erotic", "autoerotic", "babeland", "baby batter", "baby juice", "ball gag", "ball gravy", "ball kicking", "ball licking", "ball sack", "ball sucking", "bangbros", "bangbus", "bareback", "barely legal", "barenaked", "bastard", "bastardo", "bastinado", "bbw", "bdsm", "beaner", "beaners", "beaver cleaver", "beaver lips", "beastiality", "bestiality", "big black", "big breasts", "big knockers", "big tits", "bimbos", "birdlock", "bitch", "bitches", "black cock", "blonde action", "blonde on blonde action", "blowjob", "blow job", "blow your load", "blue waffle", "blumpkin", "bollocks", "bondage", "boner", "boob", "boobs", "booty call", "brown showers", "brunette action", "bukkake", "bulldyke", "bullet vibe", "bullshit", "bung hole", "bunghole", "busty", "butt", "buttcheeks", "butthole", "camel toe", "camgirl", "camslut", "camwhore", "carpet muncher", "carpetmuncher", "chocolate rosebuds", "cialis", "circlejerk", "cleveland steamer", "clit", "clitoris", "clover clamps", "clusterfuck", "cock", "cocks", "coprolagnia", "coprophilia", "cornhole", "coon", "coons", "creampie", "cum", "cumming", "cumshot", "cumshots", "cunnilingus", "cunt", "darkie", "date rape", "daterape", "deep throat", "deepthroat", "dendrophilia", "dick", "dildo", "dingleberry", "dingleberries", "dirty pillows", "dirty sanchez", "doggie style", "doggiestyle", "doggy style", "doggystyle", "dog style", "dolcett", "domination", "dominatrix", "dommes", "donkey punch", "double dong", "double penetration", "dp action", "dry hump", "dvda", "eat my ass", "ecchi", "ejaculation", "erotic", "erotism", "escort", "eunuch", "fag", "faggot", "fecal", "felch", "fellatio", "feltch", "female squirting", "femdom", "figging", "fingerbang", "fingering", "fisting", "foot fetish", "footjob", "frotting", "fuck", "fuck buttons", "fuckin", "fucking", "fucktards", "fudge packer", "fudgepacker", "futanari", "gangbang", "gang bang", "gay sex", "genitals", "giant cock", "girl on", "girl on top", "girls gone wild", "goatcx", "goatse", "god damn", "gokkun", "golden shower", "goodpoop", "goo girl", "goregasm", "grope", "group sex", "g-spot", "guro", "hand job", "handjob", "hard core", "hardcore", "hentai", "homoerotic", "honkey", "hooker", "horny", "hot carl", "hot chick", "how to kill", "how to murder", "huge fat", "humping", "incest", "intercourse", "jack off", "jail bait", "jailbait", "jelly donut", "jerk off", "jigaboo", "jiggaboo", "jiggerboo", "jizz", "juggs", "kike", "kinbaku", "kinkster", "kinky", "knobbing", "leather restraint", "leather straight jacket", "lemon party", "livesex", "lolita", "lovemaking", "make me come", "male squirting", "masturbate", "masturbating", "masturbation", "menage a trois", "milf", "missionary position", "mong", "motherfucker", "mound of venus", "mr hands", "muff diver", "muffdiving", "nambla", "nawashi", "negro", "neonazi", "nigga", "nigger", "nig nog", "nimphomania", "nipple", "nipples", "nsfw", "nsfw images", "nude", "nudity", "nutten", "nympho", "nymphomania", "octopussy", "omorashi", "one cup two girls", "one guy one jar", "orgasm", "orgy", "paedophile", "paki", "panties", "panty", "pedobear", "pedophile", "pegging", "penis", "phone sex", "piece of shit", "pikey", "pissing", "piss pig", "pisspig", "playboy", "pleasure chest", "pole smoker", "ponyplay", "poof", "poon", "poontang", "punany", "poop chute", "poopchute", "porn", "porno", "pornography", "prince albert piercing", "pthc", "pubes", "pussy", "queaf", "queef", "quim", "raghead", "raging boner", "rape", "raping", "rapist", "rectum", "reverse cowgirl", "rimjob", "rimming", "rosy palm", "rosy palm and her 5 sisters", "rusty trombone", "sadism", "santorum", "scat", "schlong", "scissoring", "semen", "sex", "sexcam", "sexo", "sexy", "sexual", "sexually", "sexuality", "shaved beaver", "shaved pussy", "shemale", "shibari", "shit", "shitblimp", "shitty", "shota", "shrimping", "skeet", "slanteye", "slut", "s&m", "smut", "snatch", "snowballing", "sodomize", "sodomy", "spastic", "spic", "splooge", "splooge moose", "spooge", "spread legs", "spunk", "strap on", "strapon", "strappado", "strip club", "style doggy", "suck", "sucks", "suicide girls", "sultry women", "swastika", "swinger", "tainted love", "taste my", "tea bagging", "threesome", "throating", "thumbzilla", "tied up", "tight white", "tit", "tits", "titties", "titty", "tongue in a", "topless", "tosser", "towelhead", "tranny", "tribadism", "tub girl", "tubgirl", "tushy", "twat", "twink", "twinkie", "two girls one cup", "undressing", "upskirt", "urethra play", "urophilia", "vagina", "venus mound", "viagra", "vibrator", "violet wand", "vorarephilia", "voyeur", "voyeurweb", "voyuer", "vulva", "wank", "wetback", "wet dream", "white power", "whore", "worldsex", "wrapping men", "wrinkled starfish", "xx", "xxx", "yaoi", "yellow showers", "yiffy", "zoophilia", "🖕" ] -------------------------------------------------------------------------------- /TorrentScraper/Results.cs: -------------------------------------------------------------------------------- 1 | public class Result 2 | { 3 | public string System { get; set; } 4 | public string Title { get; set; } 5 | public string Seeds { get; set; } 6 | public string Leechs { get; set; } 7 | public string Time { get; set; } 8 | public string Size { get; set; } 9 | public string Region { get; set; } 10 | public string Version { get; set; } 11 | public string Languages { get; set; } 12 | public string OriginalSize { get; set; } 13 | public string RepackSize { get; set; } 14 | public string Name { get; set; } 15 | public string Link { get; set; } 16 | public string Infos { get; set; } 17 | public string Downloads { get; set; } 18 | } -------------------------------------------------------------------------------- /TorrentScraper/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace SimpleThingsProvider { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.8.0.0")] 16 | public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("127.0.0.1")] 29 | public string ProxyIP { 30 | get { 31 | return ((string)(this["ProxyIP"])); 32 | } 33 | set { 34 | this["ProxyIP"] = value; 35 | } 36 | } 37 | 38 | [global::System.Configuration.UserScopedSettingAttribute()] 39 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 40 | [global::System.Configuration.DefaultSettingValueAttribute("80")] 41 | public string ProxyPort { 42 | get { 43 | return ((string)(this["ProxyPort"])); 44 | } 45 | set { 46 | this["ProxyPort"] = value; 47 | } 48 | } 49 | 50 | [global::System.Configuration.UserScopedSettingAttribute()] 51 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 52 | [global::System.Configuration.DefaultSettingValueAttribute("False")] 53 | public bool ProxyEnabled { 54 | get { 55 | return ((bool)(this["ProxyEnabled"])); 56 | } 57 | set { 58 | this["ProxyEnabled"] = value; 59 | } 60 | } 61 | 62 | [global::System.Configuration.UserScopedSettingAttribute()] 63 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 64 | [global::System.Configuration.DefaultSettingValueAttribute("-1")] 65 | public int WebsiteSelected { 66 | get { 67 | return ((int)(this["WebsiteSelected"])); 68 | } 69 | set { 70 | this["WebsiteSelected"] = value; 71 | } 72 | } 73 | 74 | [global::System.Configuration.UserScopedSettingAttribute()] 75 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 76 | [global::System.Configuration.DefaultSettingValueAttribute("-1")] 77 | public int WebsiteSubSelected { 78 | get { 79 | return ((int)(this["WebsiteSubSelected"])); 80 | } 81 | set { 82 | this["WebsiteSubSelected"] = value; 83 | } 84 | } 85 | 86 | [global::System.Configuration.ApplicationScopedSettingAttribute()] 87 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 88 | [global::System.Configuration.DefaultSettingValueAttribute("2.0.3.0")] 89 | 90 | public string ApplicationVersion { 91 | get { 92 | return ((string)(this["ApplicationVersion"])); 93 | } 94 | } 95 | 96 | [global::System.Configuration.UserScopedSettingAttribute()] 97 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 98 | [global::System.Configuration.DefaultSettingValueAttribute("Light")] 99 | public string MainTheme { 100 | get { 101 | return ((string)(this["MainTheme"])); 102 | } 103 | set { 104 | this["MainTheme"] = value; 105 | } 106 | } 107 | 108 | [global::System.Configuration.UserScopedSettingAttribute()] 109 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 110 | [global::System.Configuration.DefaultSettingValueAttribute("Blue")] 111 | public string SubTheme { 112 | get { 113 | return ((string)(this["SubTheme"])); 114 | } 115 | set { 116 | this["SubTheme"] = value; 117 | } 118 | } 119 | 120 | [global::System.Configuration.UserScopedSettingAttribute()] 121 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 122 | [global::System.Configuration.DefaultSettingValueAttribute("False")] 123 | public bool SyncWithWindows { 124 | get { 125 | return ((bool)(this["SyncWithWindows"])); 126 | } 127 | set { 128 | this["SyncWithWindows"] = value; 129 | } 130 | } 131 | 132 | [global::System.Configuration.UserScopedSettingAttribute()] 133 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 134 | [global::System.Configuration.DefaultSettingValueAttribute("False")] 135 | public bool DoNotShowAgain_RestartApplicationAfterThemeChange { 136 | get { 137 | return ((bool)(this["DoNotShowAgain_RestartApplicationAfterThemeChange"])); 138 | } 139 | set { 140 | this["DoNotShowAgain_RestartApplicationAfterThemeChange"] = value; 141 | } 142 | } 143 | 144 | [global::System.Configuration.UserScopedSettingAttribute()] 145 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 146 | [global::System.Configuration.DefaultSettingValueAttribute("False")] 147 | public bool NSFWContent { 148 | get { 149 | return ((bool)(this["NSFWContent"])); 150 | } 151 | set { 152 | this["NSFWContent"] = value; 153 | } 154 | } 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /TorrentScraper/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 127.0.0.1 7 | 8 | 9 | 80 10 | 11 | 12 | False 13 | 14 | 15 | -1 16 | 17 | 18 | -1 19 | 20 | 21 | 2.0.3.0 22 | 23 | 24 | Light 25 | 26 | 27 | Blue 28 | 29 | 30 | False 31 | 32 | 33 | False 34 | 35 | 36 | False 37 | 38 | 39 | -------------------------------------------------------------------------------- /TorrentScraper/SettingsWindow.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | Simple Things Provider 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 74 | 27 | 37 | 47 | 57 | 60 | 61 | -------------------------------------------------------------------------------- /View/AboutWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using ControlzEx.Theming; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | using System.Windows.Controls; 9 | using System.Windows.Data; 10 | using System.Windows.Documents; 11 | using System.Windows.Input; 12 | using System.Windows.Media; 13 | using System.Windows.Media.Imaging; 14 | using System.Windows.Shapes; 15 | using Utils; 16 | 17 | namespace SimpleThingsProvider 18 | { 19 | /// 20 | /// Logica di interazione per AboutWindow.xaml 21 | /// 22 | public partial class AboutWindow 23 | { 24 | private byte[] egg = { 54, 56, 55, 52, 55, 52, 55, 48, 55, 51, 51, 97, 50, 102, 50, 102, 55, 57, 54, 102, 55, 53, 55, 52, 55, 53, 50, 101, 54, 50, 54, 53, 50, 102, 54, 102, 54, 53, 51, 49, 52, 97, 52, 102, 55, 97, 53, 51, 52, 99, 55, 53, 52, 97, 54, 51 }; 25 | public AboutWindow() 26 | { 27 | InitializeComponent(); 28 | if (Settings.Default.SyncWithWindows) { ThemeManager.Current.ThemeSyncMode = ThemeSyncMode.SyncWithAppMode; } 29 | else { ThemeManager.Current.ChangeTheme(this, Settings.Default.MainTheme + "." + Settings.Default.SubTheme); } 30 | 31 | ThemeManager.Current.SyncTheme(); 32 | VersionLabel.Content = Settings.Default.ApplicationVersion; 33 | Logger.Log("About Window initialized", "About"); 34 | this.SizeToContent = SizeToContent.WidthAndHeight; 35 | } 36 | public static string _2121(String h, Encoding e) 37 | { 38 | System.Diagnostics.Debug.WriteLine(h); 39 | int n = h.Length; 40 | byte[] b = new byte[n / 2]; 41 | for (int i = 0; i < n; i += 2) 42 | { 43 | b[i / 2] = Convert.ToByte(h.Substring(i, 2), 16); 44 | } 45 | return e.GetString(b); 46 | } 47 | private void openDiscord(object sender, RoutedEventArgs e) 48 | { 49 | Logger.Log("Opening Discord Invite", "About"); 50 | var process = new System.Diagnostics.ProcessStartInfo() { UseShellExecute = true, FileName = "https://discord.com/invite/WTrCtvyPke" }; 51 | System.Diagnostics.Process.Start(process); 52 | Logger.Log("Opened Discord Invite", "About"); 53 | } 54 | private void openPatreon(object sender, RoutedEventArgs e) 55 | { 56 | Logger.Log("Opening Patreon Page", "About"); 57 | var process = new System.Diagnostics.ProcessStartInfo() { UseShellExecute = true, FileName = "https://www.patreon.com/Backend2121" }; 58 | System.Diagnostics.Process.Start(process); 59 | Logger.Log("Opened Patreon Page", "About"); 60 | } 61 | private void openReddit(object sender, RoutedEventArgs e) 62 | { 63 | Logger.Log("Opening Reddit Profile", "About"); 64 | var process = new System.Diagnostics.ProcessStartInfo() { UseShellExecute = true, FileName = "https://www.reddit.com/user/Sbigioduro" }; 65 | System.Diagnostics.Process.Start(process); 66 | Logger.Log("Opened Reddit Profile", "About"); 67 | } 68 | private void openYoutube(object sender, RoutedEventArgs e) 69 | { 70 | Logger.Log("Opening Youtube Channel", "About"); 71 | var process = new System.Diagnostics.ProcessStartInfo() { UseShellExecute = true, FileName = "https://www.youtube.com/channel/UCW2JQJs_R3O_I937yxicT9A" }; 72 | System.Diagnostics.Process.Start(process); 73 | Logger.Log("Opened Youtube Channel", "About"); 74 | } 75 | private void openEE(object sender, RoutedEventArgs e) 76 | { 77 | // That random textbox is not useless! 78 | Logger.Log("Testing the Super Secret Code Box", "About"); 79 | if (SuperSecretCodeTextBox.Text == "HelloThereGeneralKenobi") 80 | { 81 | Logger.Log("* got in!", "About"); 82 | var process = new System.Diagnostics.ProcessStartInfo() { UseShellExecute = true, FileName = _2121(Encoding.ASCII.GetString(egg), Encoding.ASCII) }; 83 | System.Diagnostics.Process.Start(process); 84 | } 85 | } 86 | } 87 | } -------------------------------------------------------------------------------- /View/HelpWindow.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 21 | 22 | -------------------------------------------------------------------------------- /View/HelpWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using ControlzEx.Theming; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | using System.Windows.Controls; 9 | using System.Windows.Data; 10 | using System.Windows.Documents; 11 | using System.Windows.Input; 12 | using System.Windows.Media; 13 | using System.Windows.Media.Imaging; 14 | using System.Windows.Shapes; 15 | using Utils; 16 | 17 | namespace SimpleThingsProvider 18 | { 19 | /// 20 | /// Logica di interazione per HelpWindow.xaml 21 | /// 22 | public partial class HelpWindow : Window 23 | { 24 | public HelpWindow() 25 | { 26 | InitializeComponent(); 27 | if (Settings.Default.SyncWithWindows) { ThemeManager.Current.ThemeSyncMode = ThemeSyncMode.SyncWithAppMode; } 28 | else { ThemeManager.Current.ChangeTheme(this, Settings.Default.MainTheme + "." + Settings.Default.SubTheme); } 29 | 30 | ThemeManager.Current.SyncTheme(); 31 | Topmost = true; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /View/LinksWindow.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /View/LinksWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using ControlzEx.Theming; 2 | using System.Windows; 3 | using System.Windows.Controls; 4 | using Utils; 5 | 6 | namespace SimpleThingsProvider 7 | { 8 | /// 9 | /// Logica di interazione per LinksWindow.xaml 10 | /// 11 | public partial class LinksWindow : Window 12 | { 13 | public LinksWindow linkWindow { get { return this; } } 14 | public LinksWindow() 15 | { 16 | InitializeComponent(); 17 | if (Settings.Default.SyncWithWindows) { ThemeManager.Current.ThemeSyncMode = ThemeSyncMode.SyncWithAppMode; } 18 | else { ThemeManager.Current.ChangeTheme(this, Settings.Default.MainTheme + "." + Settings.Default.SubTheme); } 19 | ThemeManager.Current.SyncTheme(); 20 | // Hide all linkslists 21 | LinksList.Visibility = Visibility.Hidden; 22 | HexRomsLinksList.Visibility = Visibility.Hidden; 23 | Topmost = true; 24 | } 25 | private void SelectionChanged(object sender, RoutedEventArgs e) 26 | { 27 | string link = ""; 28 | MainWindow mainWindow = (MainWindow)Application.Current.MainWindow; 29 | if (LinksList.Visibility == Visibility.Visible) 30 | { 31 | link = ((Result)LinksList.SelectedValue).Link; 32 | } 33 | else if (HexRomsLinksList.Visibility == Visibility.Visible) 34 | { 35 | link = ((Result)HexRomsLinksList.SelectedValue).Link; 36 | } 37 | mainWindow.OutputLabel.Content = link; 38 | if (link != "") { Close(); } 39 | } 40 | public ListView getLinksList() 41 | { 42 | return LinksList; 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /View/SettingsWindow.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 |