Compare commits

...

2 Commits

Author SHA1 Message Date
AnErrupTion 365933e39e
Resolve conflicts
Signed-off-by: AnErrupTion <anerruption@disroot.org>
1 month ago
AnErrupTion eefa06e40f
Add experimental save file migrator + bug fixes + add "-dev" version suffix
Signed-off-by: AnErrupTion <anerruption@disroot.org>
1 month ago

@ -1,13 +1,13 @@
const std = @import("std");
const ly_version = std.SemanticVersion{ .major = 1, .minor = 0, .patch = 0 };
const ly_version = std.SemanticVersion{ .major = 1, .minor = 0, .patch = 0, .build = "dev" };
pub fn build(b: *std.Build) void {
const data_directory = b.option([]const u8, "data_directory", "Specify a default data directory (default is /etc/ly)");
const build_options = b.addOptions();
build_options.addOption([]const u8, "data_directory", data_directory orelse "/etc/ly");
const version_str = b.fmt("{d}.{d}.{d}", .{ ly_version.major, ly_version.minor, ly_version.patch });
const version_str = b.fmt("{d}.{d}.{d}-{s}", .{ ly_version.major, ly_version.minor, ly_version.patch, ly_version.build.? });
build_options.addOption([]const u8, "version", version_str);

@ -1,4 +1,2 @@
const Save = @This();
user: ?[]const u8 = null,
session_index: ?u64 = null,

@ -0,0 +1,30 @@
const std = @import("std");
const ini = @import("zigini");
const Save = @import("Save.zig");
const Allocator = std.mem.Allocator;
pub fn tryMigrateSaveFile(allocator: Allocator, path: []const u8) Save {
var file = std.fs.openFileAbsolute(path, .{ .mode = .read_write }) catch return .{};
defer file.close();
const reader = file.reader();
const user_length = reader.readIntLittle(u64) catch return .{};
const user_buffer = allocator.alloc(u8, user_length) catch return .{};
defer allocator.free(user_buffer);
const read_user_length = reader.read(user_buffer) catch return .{};
if (read_user_length != user_length) return .{};
const session_index = reader.readIntLittle(u64) catch return .{};
const save = .{
.user = user_buffer,
.session_index = session_index,
};
ini.writeFromStruct(save, file.writer(), null) catch return save;
return save;
}

@ -2,6 +2,7 @@ const std = @import("std");
const build_options = @import("build_options");
const builtin = @import("builtin");
const clap = @import("clap");
const ini = @import("zigini");
const auth = @import("auth.zig");
const bigclock = @import("bigclock.zig");
const interop = @import("interop.zig");
@ -12,9 +13,9 @@ const Desktop = @import("tui/components/Desktop.zig");
const Text = @import("tui/components/Text.zig");
const InfoLine = @import("tui/components/InfoLine.zig");
const Config = @import("config/Config.zig");
const ini = @import("zigini");
const Lang = @import("config/Lang.zig");
const Save = @import("config/Save.zig");
const migrator = @import("config/migrator.zig");
const ViMode = @import("enums.zig").ViMode;
const SharedError = @import("SharedError.zig");
const utils = @import("tui/utils.zig");
@ -66,6 +67,7 @@ pub fn main() !void {
// Load configuration file
var config_ini = Ini(Config).init(allocator);
defer config_ini.deinit();
var lang_ini = Ini(Lang).init(allocator);
defer lang_ini.deinit();
@ -127,7 +129,7 @@ pub fn main() !void {
_ = termbox.tb_select_output_mode(termbox.TB_OUTPUT_NORMAL);
termbox.tb_clear();
// we need this to reset it after auth.
// Needed to reset termbox after auth
const tb_termios = try std.os.tcgetattr(std.os.STDIN_FILENO);
// Initialize terminal buffer
@ -164,7 +166,10 @@ pub fn main() !void {
if (config.load) {
var save_ini = Ini(Save).init(allocator);
defer save_ini.deinit();
const save = save_ini.readToStruct(config.save_file) catch Save{};
// If it fails, we try to migrate the potentially old save file. And if we can't do that, we just create
// a new save file
const save = save_ini.readToStruct(config.save_file) catch migrator.tryMigrateSaveFile(allocator, config.save_file);
if (save.user) |user| {
try login.text.appendSlice(user);

@ -71,7 +71,7 @@ pub fn addEnvironment(self: *Desktop, name: []const u8, cmd: []const u8, display
try self.environments.append(.{
.entry_ini = null,
.name = name,
.xdg_name = name, // TODO
.xdg_name = getXdgName(name),
.cmd = cmd,
.specifier = switch (display_server) {
.wayland => self.lang.wayland,
@ -88,7 +88,7 @@ pub fn addEnvironmentWithIni(self: *Desktop, entry_ini: Ini(Entry), name: []cons
try self.environments.append(.{
.entry_ini = entry_ini,
.name = name,
.xdg_name = name, // TODO
.xdg_name = getXdgName(name),
.cmd = cmd,
.specifier = switch (display_server) {
.wayland => self.lang.wayland,
@ -102,7 +102,7 @@ pub fn addEnvironmentWithIni(self: *Desktop, entry_ini: Ini(Entry), name: []cons
}
pub fn crawl(self: *Desktop, path: []const u8, display_server: DisplayServer) !void {
var iterable_directory = try std.fs.openIterableDirAbsolute(path, .{});
var iterable_directory = std.fs.openIterableDirAbsolute(path, .{}) catch return;
defer iterable_directory.close();
var iterator = iterable_directory.iterate();
@ -173,3 +173,8 @@ fn goRight(self: *Desktop) void {
self.current += 1;
}
fn getXdgName(name: []const u8) []const u8 {
// TODO
return name;
}

Loading…
Cancel
Save