Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make settings directory follow xdg specification #472

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 22 additions & 5 deletions src/chatty/Chatty.java
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,12 @@ public static void main(String[] args) {
}
}

// Check if the legacy settings directory exists and move it to follow XDG specifications
File legacySettingsDir = new File(System.getProperty("user.home") + File.separator + ".chatty");
if (legacySettingsDir.exists()) {
legacySettingsDir.renameTo(new File(getUserDataDirectory()));
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What will happen here if ~/.chatty is a link and $XDG_CONFIG_HOME/chatty already exists?

# ls -Ald ~/.chatty
lrwxrwxrwx 1 freso freso 14 15 jul  2018 /home/freso/.chatty -> .config/chatty/

Maybe this could check for whether getUserDataDirectory() already exists? Or check that legacySettingsDir is, in fact, a directory? (Or both?)

(Alternatively, this move could also be dropped and instead there could be logic to also search ~/.chatty if it exists and {$XDG_CONFIG_HOME,~/.config}/chatty do not? That would require users to move manually but would also mean no unexpected/unsupervised changes to their $HOME directories. New users should get the $XDG_CONFIG_HOME directory though.)

}

if (parsedArgs.containsKey("appwdir") && !parsedArgs.containsKey("regularwdir")) {
Path path = Stuff.determineJarPath();
if (path != null) {
Expand Down Expand Up @@ -162,7 +168,7 @@ public static void main(String[] args) {
invalidSettingsDir = path.toString();
}
}

final TwitchClient client = new TwitchClient(parsedArgs);

// Adding listener just in case, will do nothing if not used
Expand Down Expand Up @@ -235,10 +241,21 @@ public static String getUserDataDirectory() {
if (settingsDir != null) {
return settingsDir + File.separator;
}
String dir = System.getProperty("user.home")
+ File.separator
+ ".chatty"
+ File.separator;
String dir;
if (System.getenv("XDG_CONFIG_DIR") != null) {
dir = System.getenv("XDG_CONFIG_DIR")
Comment on lines +245 to +246
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be XDG_CONFIG_HOME. (There is no XDG_CONFIG_DIR in the specification and XDG_CONFIG_DIRS is not really appropriate here, though ideally that should also be searched… but that’s a whole different subject to tackle than what this PR sets out to do.)

Suggested change
if (System.getenv("XDG_CONFIG_DIR") != null) {
dir = System.getenv("XDG_CONFIG_DIR")
if (System.getenv("XDG_CONFIG_HOME") != null) {
dir = System.getenv("XDG_CONFIG_HOME")

+ File.separator
+ "chatty"
+ File.separator;
}
else {
dir = System.getProperty("user.home")
+ File.separator
+ ".config"
+ File.separator
+ "chatty"
+ File.separator;
}
new File(dir).mkdirs();
return dir;
}
Expand Down