Skip to content

Commit

Permalink
Merge pull request Issung#32 from RoyalJackal/imagelink-add-post-number
Browse files Browse the repository at this point in the history
Save post number in ImageLink, for ease of use in GenerateNewFilename
  • Loading branch information
Issung authored Aug 13, 2023
2 parents 9a5b991 + 73d411e commit e9c7c25
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 38 deletions.
25 changes: 13 additions & 12 deletions GChan/Forms/AboutBox.resx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Expand Down Expand Up @@ -118,17 +118,18 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="richTextBoxDescription.Text" xml:space="preserve">
<value>YChan forked and became GChan by Issung at
https://github.com/Issung/GChan

List of contributers to GChan (Thank you!)
- MistressAshai

YChan updated by Ricardo1991 and FugiMuffi at
https://github.com/Ricardo1991/YChan
https://github.com/FugiMuffi/YChan

Original project (YChan): https://sourceforge.net/projects/ychan/
<value>YChan forked and became GChan by Issung at
https://github.com/Issung/GChan

List of contributers to GChan (Thank you!)
- MistressAshai
- RoyalJackal

YChan updated by Ricardo1991 and FugiMuffi at
https://github.com/Ricardo1991/YChan
https://github.com/FugiMuffi/YChan

Original project (YChan): https://sourceforge.net/projects/ychan/
Created by mirage ([email protected])</value>
</data>
</root>
36 changes: 20 additions & 16 deletions GChan/ImageLink.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,39 +5,43 @@ namespace GChan
{
public class ImageLink
{
/// <summary>
/// For 4chan: Unix timestamp with microseconds at which the image was uploaded.
/// For 8kun: The ID of the post this image belongs to (same as No).
/// </summary>
public long Tim;

/// <summary>
/// URL to the access the image.
/// </summary>
public string URL;
public string Url;

/// <summary>
/// The filename the image was uploaded with.
/// e.g. "LittleSaintJames.jpg", NOT the stored filename e.g. "1265123123.jpg".
/// </summary>
public string UploadedFilename;

public ImageLink(string url, string uploadedFilename)
{
URL = url;
UploadedFilename = uploadedFilename;
}
/// <summary>
/// The ID of the post this image belongs to.
/// </summary>
public long No;

public ImageLink(long tim, string url, string uploadedFilename)
public ImageLink(long tim, string url, string uploadedFilename, long no)
{
Tim = tim;
URL = url;
Url = url;
UploadedFilename = uploadedFilename;
No = no;
}

public string GenerateNewFilename(ImageFileNameFormat format)
public string GenerateFilename(ImageFileNameFormat format)
{
//const int FILENAME_MAX_LENGTH = 254;
string[] parts = URL.Split('/');
string lastPart = (parts.Length > 0) ? parts.Last() : URL;
string[] parts = Url.Split('/');
string lastPart = (parts.Length > 0) ? parts.Last() : Url;

string extension = Path.GetExtension(URL); // Contains period (.).
string extension = Path.GetExtension(Url); // Contains period (.).

string result;

Expand All @@ -51,7 +55,7 @@ public string GenerateNewFilename(ImageFileNameFormat format)
break;
case ImageFileNameFormat.IDAndOriginalFilename:
default:
result = Path.GetFileNameWithoutExtension(URL) + " - " + UploadedFilename + extension;
result = Path.GetFileNameWithoutExtension(Url) + " - " + UploadedFilename + extension;
break;
}

Expand All @@ -65,11 +69,11 @@ public string GenerateNewFilename(ImageFileNameFormat format)
}
else if (format == ImageFileNameFormat.IDAndOriginalFilename)
{
result = Path.GetFileNameWithoutExtension(URL) + " - " + UploadedFilename + extension;
result = Path.GetFileNameWithoutExtension(Url) + " - " + UploadedFilename + extension;
}
else //ImageFileFormat == OriginalFilenameAndID
{
result = UploadedFilename + " - " + Path.GetFileNameWithoutExtension(URL) + extension;
result = UploadedFilename + " - " + Path.GetFileNameWithoutExtension(Url) + extension;
}

//if (result.Length > FILENAME_MAX_LENGTH)
Expand All @@ -84,7 +88,7 @@ public string GenerateNewFilename(ImageFileNameFormat format)

public override string ToString()
{
return $"ImageLink {{ Tim: '{Tim}', URL: '{URL}', UploadedFilename: '{UploadedFilename}' }}";
return $"ImageLink {{ Tim: '{Tim}', Url: '{Url}', UploadedFilename: '{UploadedFilename}', No: '{No}' }}";
}
}
}
13 changes: 8 additions & 5 deletions GChan/Trackers/Sites/Thread_4Chan.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,10 @@ protected override ImageLink[] GetImageLinks()
.SelectTokens("posts[*]")
.Where(x => x["ext"] != null)
.Select(x =>
new ImageLink(long.Parse(x[timPath].ToString()),
new ImageLink(x[timPath].Value<long>(),
baseURL + x[timPath] + x["ext"],
x["filename"].ToString()))
x["filename"].ToString(),
x["no"].Value<long>()))
.ToList();
}
catch (Exception ex)
Expand Down Expand Up @@ -115,9 +116,11 @@ protected override void DownloadHTMLPage()

//get the actual filename saved
string filename = Path.GetFileNameWithoutExtension(
new ImageLink(old,
post["filename"].ToString())
.GenerateNewFilename((ImageFileNameFormat)Settings.Default.ImageFilenameFormat));
new ImageLink(post["tim"].Value<long>(),
old,
post["filename"].ToString(),
post["no"].Value<long>())
.GenerateFilename((ImageFileNameFormat)Settings.Default.ImageFilenameFormat));

//Save thumbs for files that need it
if (replacement.Split('.')[1] == "webm")
Expand Down
4 changes: 2 additions & 2 deletions GChan/Trackers/Sites/Thread_8Kun.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ protected override ImageLink[] GetImageLinks()
}

// Get the numbers of replies that have 1 or more images.
var nos = jObject.SelectTokens("posts[?(@.tim)].no").Select(x => long.Parse(x.ToString())).ToList();
var nos = jObject.SelectTokens("posts[?(@.tim)].no").Select(x => x.Value<long>()).ToList();

// Loop through each reply.
foreach (var no in nos)
Expand All @@ -79,7 +79,7 @@ protected override ImageLink[] GetImageLinks()
Fpath1Url(tims[j], exts[j]); // "1"

// Save image link using reply no (number) as tim because 8kun tims have letters and numbers in them. The reply number will work just fine.
links.Add(new ImageLink(no, url, filenames[j]));
links.Add(new ImageLink(no, url, filenames[j], no));
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions GChan/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -197,12 +197,12 @@ public static bool DownloadToDir(ImageLink link, string dir)
Directory.CreateDirectory(dir);
}

string destFilepath = CombinePathAndFilename(dir, link.GenerateNewFilename((ImageFileNameFormat)Settings.Default.ImageFilenameFormat));
string destFilepath = CombinePathAndFilename(dir, link.GenerateFilename((ImageFileNameFormat)Settings.Default.ImageFilenameFormat));

try
{
using var webClient = new WebClient();
webClient.DownloadFile(link.URL, destFilepath);
webClient.DownloadFile(link.Url, destFilepath);

// TODO: Figure out how to make the async downloading work properly.
// This line is currently not working and downloads 0 byte files 100% of the time.
Expand All @@ -219,7 +219,7 @@ public static bool DownloadToDir(ImageLink link, string dir)
}
catch (WebException ex)
{
logger.Error(ex, $"Error occured while downloading link {link.URL}.");
logger.Error(ex, $"Error occured while downloading link {link.Url}.");
return false;
}
}
Expand Down

0 comments on commit e9c7c25

Please sign in to comment.