Fork Me On Github
zodream 其他技术 2020-08-04

普通删除

直接选中,右键取消订阅即可,

但是没办法删除其他机器的订阅记录。因为有些记录是不出现在 已安装 列表里的(个人猜测是已下架的壁纸)

导致每一次安装都需要下载大量的文件。

针对这种记录,就需要用特别的方法。

根据文件标题去搜索中心安装取消订阅

按道理是可以的,

但是我没有试过,因为有很多壁纸都搜不到了

这种方法也很麻烦

让这些壁纸出现在已安装列表里即可取消订阅

首先,必须清楚每一个壁纸有一个特定的 编号,删除也是根据这个编号进行删除的

实际上每一个壁纸的文件夹名就是这个编号,只要把这个编号出现在列表里,就能取消订阅了

实际操作方法:

  1. 获取编号
  2. 找到配置文件(实际是在wallpager 的安装路径下的 bin\workshopcache.json 文件)
  3. 打开文件,复制一项,改掉 workshopid 为编号即可,最好 title 也改成编号,不然认不出
  4. 打开Wallpager Engine,选中取消订阅即可
  5. 重启Wallpager Engine,就删除成功了

提供一个脚本批量生成

import os
import json

def get_all_dir(dir):
    '''
    :brief: 获取所有的文件夹名
    :param dir: string 父文件夹路径
    :return: string[] 子文件夹名
    '''
    for _, dirs, _ in os.walk(dir):
        return dirs

def get_all_workshopid(dir):
    '''
    :brief:获取所有项目的workshopid
    :param dir: string 父文件夹路径
    :return: string[] id列表
    '''
    data = []
    dirs = get_all_dir(dir)
    for item in dirs:
        data.extend(get_all_dir(dir + r'\\' + item))
    return data

def create_config(items, sample):
    '''
    :brief:根据示例生成新的项
    :param items: string[] workshopid数组
    :param sample: dict 
    :return: dict[] 
    '''
    data = []
    for item in items:
        new_item = sample.copy()
        old = new_item['workshopid']
        for (k, v) in new_item.items():
            if k == 'title' or k == 'workshopid':
                new_item[k] = item
            elif isinstance(v, str):
                new_item[k] = v.replace(old, item)
        data.append(new_item)
    return data

# steam 的安装路径
steam_dir = r'D:\Steam\\'
# steam下载的文件路径
workshop_dir = steam_dir + r'steamapps\workshop\content'
# wallpager 的配置文件路径
wallpager_config_file = steam_dir + r'steamapps\common\wallpaper_engine\bin\workshopcache.json'

id_items = get_all_workshopid(workshop_dir)

print('总文件个数:%d' %(len(id_items)))

with open(wallpager_config_file, 'r+', encoding='utf-8') as fs:
    content = fs.read()
    res = json.loads(content)
    if len(res['wallpapers']) < 1:
        print('请先订阅一个作为示例')
        exit(0)
    sample = res['wallpapers'][0]
    exist_id = []
    for item in res['wallpapers']:
        exist_id.append(item['workshopid'])
    data = list(set(id_items).difference(set(exist_id)))
    if len(data) < 1:
        print('没有缓存的文件')
        exit(0)
    new_items = create_config(data, sample)
    res['wallpapers'].extend(new_items)
    content = json.dumps(res, indent=4, ensure_ascii=False)
    fs.seek(0)
    fs.write(content)
    print('成功生成缓存配置文件,可以进行取消订阅')

全选或框选批量取消订阅即可

注意改掉里面的路径 steam_dir 必须先订阅一个壁纸

本来是想找到接口,通过接口删除的,但能力有限,没找到方法

点击查看全文
0 24 0