Nattiden 1 år sedan
förälder
incheckning
5e2b04b71f

+ 59 - 11
Project/modules/homepage_preference.py

@@ -12,6 +12,7 @@ def is_true(obj:str):
     if isinstance(obj, str):
         return obj.lower() == 'true' or obj == ''
 
+
 GET_DOMAIN_URL = require('domain').get_doamin_url
 
 class PrefenrenceEntry:
@@ -24,6 +25,9 @@ class PrefenrenceEntry:
         self.__type = type
         self.__default = default
         
+    @property
+    def type(self):
+        return self.__type
     
     @property
     def modify_method(self):
@@ -49,6 +53,22 @@ class PrefenrenceEntry:
 
     def get_value_from_save_page(self, settings):
         raise NotImplementedError()
+    
+    def convert_value(self, value):
+        type = self.__type
+        match type.__name__:
+            case 'str':
+                if isinstance(value, str):
+                    return value
+                else:
+                    return str(value)
+            case 'bool':
+                if isinstance(value, str):
+                    return value.lower() == 'true' or value == ''
+                else:
+                    return bool(value)
+            case _:
+                raise TypeError(type)
 
 class PrefenrenceHiddenEntry(PrefenrenceEntry):
     def get_element_names(self):
@@ -107,6 +127,16 @@ class PrefenrenceBoolEntry(PrefenrenceEntry):
     
     def get_value_from_save_page(self, settings):
         return is_true(settings.get(self.get_element_name(), self.default))
+    
+class PrefenrenceResetEntry(PrefenrenceHiddenEntry):
+    
+    def __init__(self, name, type, default, reset_value):
+        super().__init__(name, type, default)
+        self.__reset_value = reset_value
+    
+    @property
+    def reset_value(self):
+        return self.__reset_value
 
 class PreferenceManager:
     __entries:Dict[str, PrefenrenceEntry] = {}
@@ -134,7 +164,10 @@ class PreferenceManager:
         settings = context.setter.toProperties().get('args',{})
         current_value = settings.get(key)
         if current_value is not None:
-            return current_value == value
+            if value == True:
+                return is_true(current_value)
+            else:
+                return current_value == value
         else:
             return entry.default == value
     
@@ -147,14 +180,25 @@ class PreferenceManager:
         return self.__entries.values()
     
 PreferenceManager.add_entries([
-            PrefenrenceChoiceEntry('skin', str, 'basic',
-                             ['basic', 'newra']),
-            PrefenrenceChoiceEntry('edition', str, 'standard',
-                             ['standard', 'light']),
-            PrefenrenceBoolEntry('hidewip', bool, False),
-            PrefenrenceHiddenEntry('mod', bool, False),
-            PrefenrenceHiddenEntry('beta', bool, False)
-        ])
+    PrefenrenceChoiceEntry('Skin', str, 'basic',
+                        ['basic', 'newra', 'classic',]),
+    PrefenrenceChoiceEntry('Edition', str, 'standard',
+                        ['standard', 'light']),
+    PrefenrenceBoolEntry('HideWIP', bool, False),
+    PrefenrenceBoolEntry('HideLaunchButton', bool, False),
+    PrefenrenceBoolEntry('HideDownloadButton', bool, False),
+    PrefenrenceBoolEntry('HideServerJarButton', bool, False),
+    PrefenrenceResetEntry('mod', bool, False, True),
+    PrefenrenceResetEntry('beta', bool, False, False)
+])
+
+@script('IsUsingPreset')
+def get(content, context:'Context', *_args, **_kwargs):
+    settings = context.setter.toProperties().get('args',{})
+    if not is_true(settings.get('mod')):
+        return content
+    else:
+        return ''
 
 @script('PreferenceUrl')
 def get_preferece_url(context:'Context', *_args, **_kwargs):
@@ -163,8 +207,11 @@ def get_preferece_url(context:'Context', *_args, **_kwargs):
     url = GET_DOMAIN_URL(context)
     for entry in PreferenceManager.get_entries():
         value = entry.get_value_from_save_page(settings=settings)
+        value = entry.convert_value(value)
+        if isinstance(entry, PrefenrenceResetEntry):
+            value = entry.reset_value
         if value != entry.default:
-            if is_true(value):
+            if value == True:
                 args.append(entry.name)
             else:
                 args.append(entry.name + '=' + value)
@@ -182,7 +229,8 @@ def preferece_save_page_url(context:'Context', *_args, **_kwargs):
         if isinstance(entry, PrefenrenceHiddenEntry):
             value = settings.get(entry.name)
             if value is not None:
-                string_format += f'{entry.name}={value}'
+                value = entry.convert_value(value)
+                string_format += f'{entry.name}={value}&'
             continue
         for name in entry.get_element_names():
             string_format += f'{name}={{{i}}}&'

+ 17 - 12
Project/pages/Preference/Preference.xaml

@@ -78,12 +78,12 @@
                 <ColumnDefinition Width="*"/>
                 <ColumnDefinition Width="*"/>
             </Grid.ColumnDefinitions>
-            ${@PreferenceRadioBox|edition|standard|0|0|
+            ${@PreferenceRadioBox|Edition|standard|0|0|
                 <Run>完整</Run>
                 <LineBreak/>
                 <Run FontSize="10">原汁原味的新闻主页体验</Run>
             }
-            ${@PreferenceRadioBox|edition|light|1|0|
+            ${@PreferenceRadioBox|Edition|light|1|0|
                 <Run>精简</Run>
                 <LineBreak/>
                 <Run FontSize="10">只保留最新版本的链接,性能更高</Run>
@@ -98,26 +98,31 @@
             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="*"/>
                 <ColumnDefinition Width="*"/>
+                <ColumnDefinition Width="*"/>
             </Grid.ColumnDefinitions>
-            <Grid.RowDefinitions>
-                <RowDefinition/>
-                <RowDefinition/>
-            </Grid.RowDefinitions>
-            ${@PreferenceRadioBox|skin|basic|0|1|
-                <Run>基础</Run>
+            ${@PreferenceRadioBox|Skin|basic|0|1|
+                <Run>默认</Run>
             }
-            ${@PreferenceRadioBox|skin|newra|1|1|
+            ${@PreferenceRadioBox|Skin|newra|1|1|
                 <Run>通透</Run>
+                <LineBreak/>
+                <Run FontSize="10">不一样的头图栏</Run>
+            }
+            ${@PreferenceRadioBox|Skin|classic|2|1|
+                <Run>经典</Run>
+                <LineBreak/>
+                <Run FontSize="10">2023 新闻主页经典款式</Run>
             }
-            <local:MyImage Grid.Column="0" Grid.Row="0" Source="https://s21.ax1x.com/2025/08/03/pVNbeg0.png" Margin="10,5"/>
-            <local:MyImage Grid.Column="1" Grid.Row="0" Source="https://s21.ax1x.com/2025/08/03/pVNb359.png" Margin="10,5"/>
         </Grid>
     </StackPanel>
 </local:MyCard>
 
 <local:MyCard Margin="0,0,0,15" CanSwap="False" Title="杂项">
     <StackPanel Margin="25,40,23,15"> 
-        ${@PreferenceCheckBox|hidewip|隐藏“正在翻译中”动画}
+        ${@PreferenceCheckBox|HideWIP|隐藏“正在翻译中”动画}
+        ${@PreferenceCheckBox|HideLaunchButton|隐藏启动按钮}
+        ${@PreferenceCheckBox|HideDownloadButton|隐藏下载按钮}
+        ${@PreferenceCheckBox|HideServerJarButton|隐藏服务端下载按钮}
     </StackPanel>
 </local:MyCard>
 

+ 6 - 5
Project/pages/Preference/SaveChanges.xaml

@@ -29,10 +29,11 @@
         自动保存
     </local:MyCard.Inlines>
     <StackPanel Margin="25,50,23,15">
-        ${@IF|${args.mod}|
+        <local:MyHint Margin="0,0,0,4" Theme="yellow">自动保存仅支持 PCL 版本 2.10.6+,若无法使用自动保存请使用下方的手动保存。</local:MyHint>
+        ${@IsUsingPreset|
         <TextBlock Margin="0,0,0,4">
-            0.应用设置前需要将主页设置从预设改为联网更新。你需要点击下方按钮更改设置。
-        </local:TextBlock>
+            0.应用设置前需要将主页设置从预设改为联网更新(之后再次设置时无需更改)。你需要点击下方按钮更改设置。
+        </TextBlock>
         <local:MyButton Text="切换为联网更新" 
                         EventType="修改设置"
                         Height="40" Margin="20,10,20,10" EventData="UiCustomType|2"/>}
@@ -55,9 +56,9 @@
         </local:MyButton>
     </StackPanel>
 </local:MyCard>
-<local:MyCard Title="手动更改" Margin="0,0,0,15" CanSwap="False">
+<local:MyCard Title="手动保存" Margin="0,0,0,15" CanSwap="True" IsSwapped="True">
     <StackPanel Margin="25,40,23,15">
-        <Grid  Margin="0,0,0,14">
+        <Grid Margin="0,0,0,14">
             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="*"/>
                 <ColumnDefinition Width="80"/>

+ 6 - 2
Project/structures/components/Classic/VersionToolBar.xaml

@@ -9,14 +9,18 @@ ${@IF|${translator}|${@IF|!${translators_in_new_line}|
 }}
 
 <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
+${@IF|${args.HideLaunchButton}||
 <local:MyIconTextButton Text="启动" ToolTip="启动 ${version-id}" EventType="启动游戏"
     EventData="${version-id}" LogoScale="0.85" Logo="{StaticResource LaunchIcon}" />
+}
+${@IF|${args.HideDownloadButton}||
 <local:MyIconTextButton Style="{StaticResource DownloadVersionButton}"
     LogoScale="0.85" Logo="{StaticResource DownloadIcon}"/>
-${@IF|${server-jar}|
+}
+${@IF|${server-jar}|${@IF|${args.HideServerJarButton}||
 <local:MyIconTextButton Style="{StaticResource ServerJarDownloadButton}"
     LogoScale="1.05" EventData="${server-jar}" Logo="{StaticResource CloudIcon}" />
-}
+}}
 </StackPanel>
 </Grid>
 

+ 6 - 2
Project/structures/components/VersionToolBar.xaml

@@ -1,12 +1,16 @@
 <WrapPanel Margin="-2,2" Orientation="Horizontal" VerticalAlignment="Center">
+${@IF|${args.HideLaunchButton}||
 <local:MyIconTextButton Text="启动" ToolTip="启动 ${version-id}" EventType="启动游戏"
     EventData="${version-id}" LogoScale="0.85" Logo="{StaticResource LaunchIcon}" />
+}
+${@IF|${args.HideDownloadButton}||
 <local:MyIconTextButton Style="{StaticResource DownloadVersionButton}"
     LogoScale="0.85" Logo="{StaticResource DownloadIcon}"/>
-${@IF|${server-jar}|
+}
+${@IF|${server-jar}|${@IF|${args.HideServerJarButton}||
 <local:MyIconTextButton Style="{StaticResource ServerJarDownloadButton}"
     LogoScale="1.05" EventData="${server-jar}" Logo="{StaticResource CloudIcon}" />
-}
+}}
 <local:MyIconTextButton Text="WIKI" ToolTip="在 Minecraft Wiki 上查看该版本" EventType="打开网页"
     EventData="${wiki-link}" LogoScale="1.05" Logo="{StaticResource WikiIcon}" />
 <local:MyIconTextButton Text="官网更新日志" ToolTip="在官网查看该版本更新日志" EventType="打开网页"

+ 1 - 1
Project/structures/templates/Classic/VersionBase.yml

@@ -3,7 +3,7 @@ components:
  - ${@IF|${hint}|Head/Hint}
  - ${@IF|${version-image-link}|VersionHeaderImage}
  - FlowDocumentViewer
- - ${@IF|${args.hidewip}|${@IF|${not_finished}|Loading}}
+ - ${@IF|${args.HideWIP}|${@IF|${not_finished}|Loading}}
  - ${@IF|!${disable-websites}|Classic/VersionWebsites}
  - ${@IF|!${disable-toolbar}|Classic/VersionToolBar}
 base: Card

+ 1 - 1
Project/structures/templates/Classic/VersionLatestCard.yml

@@ -5,7 +5,7 @@ filter:
   file_exten:
     - md
     - markdown
-  skin: classic
+  args.Skin: classic
   latest: true
 override:
   title: 最新${version-type} - ${version-id}

+ 1 - 1
Project/structures/templates/Classic/VersionMarkdownCard.yml

@@ -5,4 +5,4 @@ filter:
   file_exten:
     - md
     - markdown
-  skin: classic
+  args.Skin: classic

+ 1 - 1
Project/structures/templates/Newra/VersionBase.yml

@@ -3,7 +3,7 @@ components:
  - ${@IF|${hint}|Head/Hint}
  - ${@IF|!${disable-versionimage}|${@IF|${version-image-link}|Newra/VersionHeaderImage}}
  - FlowDocumentViewer
- - ${@IF|${args.hidewip}|${@IF|${not_finished}|Loading}}
+ - ${@IF|${args.HideWIP}|${@IF|${not_finished}|Loading}}
  - ${@IF|!${disable-translator}|TranslatorBar}
  - ${@IF|!${disable-lastupdate}|LastUpdateBox}
  - ${@IF|!${disable-toolbar}|VersionToolBar}

+ 1 - 1
Project/structures/templates/Newra/VersionLatestCard.yml

@@ -5,7 +5,7 @@ filter:
   file_exten:
     - md
     - markdown
-  args.skin: newra
+  args.Skin: newra
   latest: true
 override:
   title: 最新${version-type} - ${version-id}

+ 1 - 1
Project/structures/templates/Newra/VersionMarkdownCard.yml

@@ -5,4 +5,4 @@ filter:
   file_exten:
     - md
     - markdown
-  args.skin: newra
+  args.Skin: newra

+ 1 - 1
Project/structures/templates/Simplex/VersionBase.yml

@@ -3,7 +3,7 @@ components:
  - ${@IF|${hint}|Head/Hint}
  - ${@IF|!${disable-versionimage}|${@IF|${version-image-link}|VersionHeaderImage}}
  - FlowDocumentViewer
- - ${@IF|${args.hidewip}|${@IF|${not_finished}|Loading}}
+ - ${@IF|${args.HideWIP}||${@IF|${not_finished}|Loading}}
  - ${@IF|!${disable-translator}|TranslatorBar}
  - ${@IF|!${disable-lastupdate}|LastUpdateBox}
  - ${@IF|!${disable-toolbar}|VersionToolBar}